Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Test Drive Twig with Sculpin
Search
Oliver Davies
July 25, 2015
Programming
1
630
Test Drive Twig with Sculpin
Oliver Davies
July 25, 2015
Tweet
Share
More Decks by Oliver Davies
See All by Oliver Davies
Building Static Websites with Sculpin
opdavies
0
1.5k
Taking Flight with Tailwind CSS
opdavies
0
4.7k
TDD - Test Driven Drupal
opdavies
0
3.4k
Building "Build Configs"
opdavies
0
350
Communities and contribution
opdavies
0
130
Working without Workspace
opdavies
0
190
Things you should know about PHP
opdavies
1
680
An Introduction to Mob Programming
opdavies
0
220
Deploying PHP applications with Ansible, Ansible Vault and Ansistrano
opdavies
0
6k
Other Decks in Programming
See All in Programming
個人開発で使ってるやつを紹介する回
yohfee
1
690
"Swarming" をコンセプトに掲げるアジャイルチームのベストプラクティス
boykush
2
220
Removing Corepack
yosuke_furukawa
PRO
9
1.1k
.NET Aspireのクラウド対応検証: Azureと他環境での実践
ymd65536
1
390
Memory API: Patterns, Use Cases, and Performance
josepaumard
1
100
AWS Lambda Web Adapterを活用する新しいサーバーレスの実装パターン
tmokmss
6
5.9k
Beyond Laravel Octane - Hyperf for Laravel Artisans
albertcht
1
120
利用者視点で考える、イテレータとの上手な付き合い方
syumai
4
220
ACES Meet におけるリリース作業改善の取り組み
fukucheee
0
130
推しの夫に恋のGPS「ときメーター」#M5Stack #IoT #M5JPTour2024
riyu
0
230
標準ライブラリの動向とイテレータのパフォーマンス
makki_d
3
200
Go製CLIツールGatling Commanderによる負荷試験実施の自動化
okmtz
3
690
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
26
4k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
7
570
Practical Orchestrator
shlominoach
186
10k
Why You Should Never Use an ORM
jnunemaker
PRO
53
9k
From Idea to $5000 a Month in 5 Months
shpigford
380
46k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
24
1.7k
Happy Clients
brianwarren
97
6.7k
How GitHub (no longer) Works
holman
311
140k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
4
110
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
41
9.2k
Side Projects
sachag
452
42k
Transcript
Test Drive Twig with Sculpin AKA Get Ready for Theming
in Drupal 8
• What is Sculpin, and why should I use it?
• How to install Sculpin • How to build a Sculpin site • How to do cool things with Twig This Talk
Oliver Davies (opdavies) • Drupaler since 2007 • Senior Developer
at Microserve • Drupal 7 and 8 core contributor • Contrib project maintainer • User group, sprint, conference organiser whoami
Oliver Davies (opdavies) • Sculpin hobbyist • Twig enthusiast •
Former Jekyll user whoami
Sculpin
• Static site generator • Open source • Written in
PHP, based on Symfony components • CLI tool, based on Symfony Console • Markdown/HTML/Twig > HTML • Awesome for small sites, HTML prototypes and learning Twig. What is Sculpin?
Why use a static site generator at all? • Reduces
duplication / D.R.Y. • Better performance compared to dynamic sites • Faster to develop (maybe?) Why?
Drupal 8’s little brother • Both use YAML and Twig
• Both have content types • Both have taxonomies • Both have “fieldable entities” Similarities
Getting Started Installation and Configuration
$ curl -O https://download.sculpin.io/sculpin.phar $ chmod +x sculpin.phar $ mv
sculpin.phar /usr/local/bin/sculpin https://sculpin.io/download/ Install
Alternatives • Download via Composer • Clone from GitHub •
Use Sculpin Blog Skeleton or Sculpin Minimal • Use the Ansible role Install
Basic Site Structure app/ config/ sculpin_kernel.yml sculpin_site.yml source/ _layouts/ default.html
index.md
Configure app/config/sculpin_site.yml title: Oliver Davies source/_layouts/default.html {{ site.title }}
Configure app/config/sculpin_site_prod.yml imports: - sculpin_site.yml url: http://www.oliverdavies.uk google_analytics_tracking_code: UA-XXXXXX-1
Configure source/_layouts/default.html {% if site.google_analytics_tracking_code %} ... {% endif %}
app/config/sculpin_kernel.yml sculpin_content_types: posts: permalink: blog/:slug_title/ talks: Content Types
app/config/sculpin_kernel.yml sculpin_content_types: posts: permalink: blog/:slug_title/ taxonomies: [ tags, categories ]
talks: Taxonomies
source/_posts/2015-07-24-drupalcamp-north.md --- title: DrupalCamp North tags: - drupalcamp - drupalcamp-north
Taxonomies
source/_layouts/post.html --- use: [ ‘tags’ ] --- {% for tag
in page.tags %} {{ tag }} {% endfor %} Taxonomies
app/config/sculpin_kernel.yml sculpin_theme: theme: opdavies/oliverdavies15 Themes (Experimental)
Adding custom functionality. They are a thing. Bundles
$ sculpin generate $ sculpin generate --server $ sculpin generate
--server --watch $ sculpin generate --env=prod Build
Adding Content
Simplest Source File source/index.md --- --- # Hello World
Simplest Source File output_dev/ index.html
--- layout: default title: About --- # Hello World YAML
Front Matter
--- layout: default title: About foo: bar --- # Hello
World YAML Front Matter
Twig
source/_layouts/default.html <body class=”{% block body_classes ‘’ %}”> {% block content
%}{% endblock %} </body> Layouts
source/about.html --- {% block body_classes ‘page--about’ %} {% block content
%} <p>Content</p> {% endblock %} Blocks
source/about.md --- {% block body_classes ‘page--about’ %} {% block content
%} Content {% endblock %} Blocks
source/_layouts/post.html {% extends ‘default’ %} {% block content %}{% endblock
%} Template Inheritance
source/_partials/talk-listing-item.html <li> {% if talk.link -%}<a href="{{ talk.link }}">{%- endif
-%} {{ talk.title }} {% if talk.link %}</a>{% endif %} </li> Partials
source/talks.html <ul> {% for talk in page.talks %} {% include(‘talk-listing-item’)
%} {% endfor %} </ul> Partials
source/_partials/head.html {% if page.meta.og %} {% include "og" with {
og: page.meta.og } %} {% endif %} Partials
Twig Tips & Tricks
Filters {{ foo|upper }} {{ bar|lower }} {{ page.excerpt|replace( {
‘h2’: ‘h3’ } ) }} Tips & Tricks
Rendering objects and arrays {{ site.drupalorg.url }} Tips & Tricks
Loops {% for meetup in site.meetups %} {% if loop.first
%} ... {% endif %} {% endfor %} Tips & Tricks
Conditional logic {% if site.foo == ‘bar’ %} ... {%
else %} ... {% endif %} Tips & Tricks
Conditional logic {% set date = ‘now’|date(‘Y’) %} {% for
talk in page.talks if talk.date >= now %} ... {% endfor %} Tips & Tricks
Shorthand blocks {% block body_classes %}page--blog page--blog__list {% endblock %}
{% block body_classes ‘page--blog page--blog__list’ %} Tips & Tricks
Block appending {% block sidebar %} {{ parent() }} {%
endblock %} Tips & Tricks
Whitespace {% if site.foo == ‘bar’ -%} ... {%- endif
%} Tips & Tricks
Spaceless {% spaceless %} ... {% endspaceless %} Tips &
Tricks
Raw output {% raw %} {% if site.foo == ‘bar’
%} ... {% endif %} {% endraw %} Tips & Tricks
Links Links
Useful Links • http://bit.ly/sculpin-twig-resources
Questions @opdavies