SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Downloaden Sie, um offline zu lesen
TWIG
Drupal 8, It’s in Core

OCPHP / OC Drupal

@ocphp
ME
•

PHP Application Developer

Who happens to do Drupal

Who also likes to dabble in frontend	


•

Experience with Twig is in Silex, a micro-framework
built on Symfony	


•

Been organizer of OCPHP for nearly 8 years and OC
Drupal around ~4 years
THE PRESENTATION

A little less about Drupal and more just about Twig	

Picture and Demo free
WHAT IS TWIG
•

A PHP Template Engine to separate Presentation
Layer from the Controller/Model (PHP)	


•

Developed by same people behind Symfony; yes,
that’s in Drupal 8 Core too
COMMON COMPLAINTS
BUT PHP WAS JUST FINE, 	

WHY TWIG ?
•

Mixed PHP with HTML can be just plain sloppy and hard to read	


•

PHP still has to scan html documents looking for all those <?php
tags amongst the HTML	


•

Designers have too much power and can open security bugs in
the presentation layer with PHP	


•

Defining a function or filtering for theming was sloppy — no real
standard way
I DON’T WANT MORE BLOAT
•

PHP is definitely faster but Twig is safer	

As a developer, you control the PHP executed in a template. No possible
coding hacks like this in Templates … 


•



<?php $user = db_query(“SELECT n.nid FROM users WHERE uid = “.
$_GET[‘uid’].“)”; ?>	

•

Obviously a bit more execution time and memory but Twig has been around for
a while, tested, and aims to be fast ! Generated PHP will run through OPCode.	


•

Twig caches the generate PHP code so only changes are re-generated
Besides … In Drupal, Twig is the least of your
worries when it comes to bloat.
Rendered Arrays
SO WHAT ARE THE BENEFITS
BENEFITS
•

An extendable template engine	


•

Secure (can enable variable output escaping globally)	


•

It’s Unit Tested	


•

Great documentation and online resources	


•

Not coupled to Symfony so it has its own roadmap and
community
EVEN MORE BENEFITS
•

Easy to understand clean syntax	


•

Extend it and create your own filters or functions to give
designers to use	


•

Once you know it, can use it in other PHP frameworks outside of
Drupal	


•

Syntax support in several IDEs (PHPStorm)

http://blog.jetbrains.com/phpstorm/2013/06/twig-support-inphpstorm/
NOT ANOTHER SYNTAX
LEARN !
…STOP WHINING, IT’S PRETTY
EASY…
PRINT OUTPUT
<?php print $user[‘name’]; ?>	

!
!

{{ user.name }}
COMMENTS
depending on developers mood	

<?php // …. ?>	

<?php /* …. ?>	

!

{# Comment #}
FILTERS
<?php t(‘Welcome, ’ . $user[‘name’]); ?>	

!

{{ ‘Welcome, @name’|t({ ‘@name’: user.name }) }}
COMBINING FILTERS
<?php strtoupper(t(‘Welcome, ’ . $user[‘name’]);) ?>	

!

{{ ‘Welcome, @name’|t({ ‘@name’: user.name }|upper) }}
IF
<?php if (isset($user[‘name’])) { echo $user[‘name’] } else { echo
‘Who are you?’ }; ?>	

!

{% if user.name is defined %} 	

{{ user.name }} 	

{% else %} 	

Who are you? 	

{% endif %}	

!

Not testing, but following might work too	

{% user.name|default(‘Who are you’) %}
LOOPS
<?php foreach ( $users as $key => $user ) { print
$user[‘name’]; } ?>	

!

{% for key, user in users %}	

	

 {{ user.name }}	

{% endfor %}
CONTROL WHITESPACE
use - in output or function tags	

!

{{- user.name -}}	

!

{%- if user.name is defined -%}{%- endif -%}	

!
CALCULATIONS
<?php print $user[‘total’] + 1; ?>	

!

{{ users.total + 1 }}	

!
!
CONCAT / SET STRINGS
<?php print strtolower(‘’Greeting ‘ . $user[‘first’]); ?>	

!

{% set greeting = 'Hello ' %}	

{% set name = user.first %}	

!

{{ greeting ~ name|lower }} {# Hello bob #}	

!

{{ (greeting ~ name)|lower }} {# hello bob #}
EXPRESSIONS
{% if 1 not in [1, 2, 3] %}	

!

{% if 'cd' in 'abcde' %}	

!

{% if 'Bob' starts with 'B' %}	

!

{% if phone matches '{^[d.]+$}' %}	

!
http://twig.sensiolabs.org/doc/templates.html#twig-expressions
LOGIC WITH EXPRESSIONS
PHP: && || <>	

!

and	

or 	

not	

!

{% if user.name is not defined or user.name == ‘Bob’ %}	

!
http://twig.sensiolabs.org/doc/templates.html#twig-expressions
EXTENDING
Don’t duplicate the whole twig file just to change a single piece of
output. Extend it.	

!

{% extends ‘layout.html.twig’ %}	

!

or if layout = “layout.html.twig” was set as Twig Global/var	

!

{% extends layout %}
CONDITIONAL EXTENDS
(mobile variable is set in code and passed to template)	

!

{% extends mobile ? “mobile.html.twig" : “layout.html.twig” %}	

!
!
!
BLOCKS
Define content in blocks to allow for extending of templates !	

!

{% block sidebar %}	

…content…	

{% endblock %}	

!
!
OVERRIDING BLOCKS
The benefit of extending and defining blocks in a template.	

!

Any child template can override just that block content from
the parent template without having to change any other html !	

!
OVERRIDING BLOCKS
{% extends '/core/modules/system/tests/modules/twig_theme_test/
modules/twig_namespace_a/templates/test.html.twig' %}	

!

{% block content %}	

	

 I just overrode the content block in the parent template.	

{% endblock %}	

!
!
INCLUDE OTHER TEMPLATES
{% extends ‘layout.html.twig’ %}	

!

{% include ‘sidebar-left.html.twig’ %}	

!

{% block content %}	

	

 I just overrode the content block in the parent template.	

{% endblock %}	

!
!
!
WHAT ABOUT DEBUGGING?
DEBUG IN DRUPAL 8
In settings.php, uncomment ….	

!

# $settings['twig_debug'] = TRUE;	

# $settings['twig_auto_reload'] = TRUE;	

# $settings['twig_cache'] = FALSE;
DEBUG IN DRUPAL 8
!

{{ dump(user) }}	

!
!
!

Since Twig process the template into a generate PHP file, don’t
believe you can step through with XDebug and IDE like PHPStorm.
(??)
TWIG LOOKS GREAT !	

BUT NOW WHAT ?
!

It’s a huge undertaking to replace the theme layer and currently
still progressing but several templates have been converted:
views, base templates, etc.	

!

Twig Initiative ToDo List
!

https://groups.drupal.org/node/278968
D7 TO D8 TEMPLATES
Extensive work required but checkout Twigify	

!

Twigify is a module for converting Drupal 7 PHP Template
themes to Drupal 8 Twig themes. It was presented/demoed at
Drupalcon Portland (BOF) and at numerous US camp sessions,
and also in the Twig Lab at Drupalcon Prague.	

!

https://drupal.org/node/2099611	

!
THANKS !
Questions?
william.estrada@ocphp.org	

!

linkedin.com/in/webbywe
RESOURCES
•

On IRC, #drupal-twig	


•

(Do something about Drupal theming) http://jacine.net/post/19652705220/theme-system	


•

(YouTube DrupalCon Portland) http://www.youtube.com/watch?v=tPJ6LRJN0nw&feature=youtu.be	


•

(Twig) http://twig.sensiolabs.org/	


•

(Twiggy - sample template by Jen Lampton) https://github.com/jenlampton/twiggy/tree/master/templates	


•

(Twig in Drupal 8 slides) http://www.slideshare.net/Wizzlern/twig-in-drupal8	


•

(Twig support in PHPStorm) http://blog.jetbrains.com/phpstorm/2013/06/twig-support-in-phpstorm/	


•

(Twig coding standards) http://twig.sensiolabs.org/doc/coding_standards.html	


•

(Debugging in Twig) https://drupal.org/node/1906780	


•

(Current ToDo List) https://groups.drupal.org/node/278968	


•

(Drupal 8 and power of Twig) http://rootwork.org/blog/2013/05/drupal-8-power-twig-drupalcon-portland-featured-session	


•

(Twig Performance) http://www.appneta.com/blog/twig-performance/

Weitere ähnliche Inhalte

Was ist angesagt?

Learning PHP for Drupal Theming, DC Chicago 2009
Learning PHP for Drupal Theming, DC Chicago 2009Learning PHP for Drupal Theming, DC Chicago 2009
Learning PHP for Drupal Theming, DC Chicago 2009
Emma Jane Hogbin Westby
 
Drupal 7 Theming - what's new
Drupal 7 Theming - what's newDrupal 7 Theming - what's new
Drupal 7 Theming - what's new
Marek Sotak
 
Atomicant Drupal 6 Theming
Atomicant Drupal 6 ThemingAtomicant Drupal 6 Theming
Atomicant Drupal 6 Theming
Marek Sotak
 

Was ist angesagt? (20)

Grok Drupal (7) Theming (presented at DrupalCon San Francisco)
Grok Drupal (7) Theming (presented at DrupalCon San Francisco)Grok Drupal (7) Theming (presented at DrupalCon San Francisco)
Grok Drupal (7) Theming (presented at DrupalCon San Francisco)
 
Converting (X)HTML/CSS template to Drupal 7 Theme
Converting (X)HTML/CSS template to Drupal 7 ThemeConverting (X)HTML/CSS template to Drupal 7 Theme
Converting (X)HTML/CSS template to Drupal 7 Theme
 
Being Dangerous with Twig
Being Dangerous with TwigBeing Dangerous with Twig
Being Dangerous with Twig
 
TWIG: the flexible, fast and secure template language for PHP
TWIG: the flexible, fast and secure template language for PHPTWIG: the flexible, fast and secure template language for PHP
TWIG: the flexible, fast and secure template language for PHP
 
Introduction to Drupal (7) Theming
Introduction to Drupal (7) ThemingIntroduction to Drupal (7) Theming
Introduction to Drupal (7) Theming
 
Learning PHP for Drupal Theming, DC Chicago 2009
Learning PHP for Drupal Theming, DC Chicago 2009Learning PHP for Drupal Theming, DC Chicago 2009
Learning PHP for Drupal Theming, DC Chicago 2009
 
Grok Drupal (7) Theming
Grok Drupal (7) ThemingGrok Drupal (7) Theming
Grok Drupal (7) Theming
 
A look at Drupal 7 Theming
A look at Drupal 7 ThemingA look at Drupal 7 Theming
A look at Drupal 7 Theming
 
Drupal Front End PHP
Drupal Front End PHPDrupal Front End PHP
Drupal Front End PHP
 
HTML 5 Step By Step - Ebook
HTML 5 Step By Step - EbookHTML 5 Step By Step - Ebook
HTML 5 Step By Step - Ebook
 
WordPress Theme Development for Designers
WordPress Theme Development for DesignersWordPress Theme Development for Designers
WordPress Theme Development for Designers
 
Drupal 7 Theming - what's new
Drupal 7 Theming - what's newDrupal 7 Theming - what's new
Drupal 7 Theming - what's new
 
PSD to a Drupal Theme (using a base theme)
PSD to a Drupal Theme (using a base theme)PSD to a Drupal Theme (using a base theme)
PSD to a Drupal Theme (using a base theme)
 
Drupal 7 Theme System
Drupal 7 Theme SystemDrupal 7 Theme System
Drupal 7 Theme System
 
Adopt or hack - how to hack a theme in a Drupal way
Adopt or hack - how to hack a theme in a Drupal wayAdopt or hack - how to hack a theme in a Drupal way
Adopt or hack - how to hack a theme in a Drupal way
 
Git Makes Me Angry Inside
Git Makes Me Angry InsideGit Makes Me Angry Inside
Git Makes Me Angry Inside
 
Oop's in php
Oop's in php Oop's in php
Oop's in php
 
Php go vrooom!
Php go vrooom!Php go vrooom!
Php go vrooom!
 
Advancing Your Custom Fields - WordCamp 2014
Advancing Your Custom Fields - WordCamp 2014Advancing Your Custom Fields - WordCamp 2014
Advancing Your Custom Fields - WordCamp 2014
 
Atomicant Drupal 6 Theming
Atomicant Drupal 6 ThemingAtomicant Drupal 6 Theming
Atomicant Drupal 6 Theming
 

Ähnlich wie Twig for Drupal 8 and PHP | Presented at OC Drupal

Winter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHPWinter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHP
tutorialsruby
 
Winter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHPWinter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHP
tutorialsruby
 
Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress
Maurizio Pelizzone
 
Save time by applying clean code principles
Save time by applying clean code principlesSave time by applying clean code principles
Save time by applying clean code principles
Edorian
 
Future proofing design work with Web components
Future proofing design work with Web componentsFuture proofing design work with Web components
Future proofing design work with Web components
btopro
 

Ähnlich wie Twig for Drupal 8 and PHP | Presented at OC Drupal (20)

Drupal 8 - Core and API Changes
Drupal 8 - Core and API ChangesDrupal 8 - Core and API Changes
Drupal 8 - Core and API Changes
 
Twig: Friendly Curly Braces Invade Your Templates!
Twig: Friendly Curly Braces Invade Your Templates!Twig: Friendly Curly Braces Invade Your Templates!
Twig: Friendly Curly Braces Invade Your Templates!
 
Drupal Best Practices
Drupal Best PracticesDrupal Best Practices
Drupal Best Practices
 
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven PignataroJoomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
 
Introduction to Using PHP & MVC Frameworks
Introduction to Using PHP & MVC FrameworksIntroduction to Using PHP & MVC Frameworks
Introduction to Using PHP & MVC Frameworks
 
Drupal7 Theming session on the occassion of Drupal7 release party in Delhi NCR
Drupal7 Theming session on the occassion of  Drupal7 release party in Delhi NCRDrupal7 Theming session on the occassion of  Drupal7 release party in Delhi NCR
Drupal7 Theming session on the occassion of Drupal7 release party in Delhi NCR
 
Survey on Script-based languages to write a Chatbot
Survey on Script-based languages to write a ChatbotSurvey on Script-based languages to write a Chatbot
Survey on Script-based languages to write a Chatbot
 
Php
PhpPhp
Php
 
Winter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHPWinter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHP
 
Winter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHPWinter%200405%20-%20Beginning%20PHP
Winter%200405%20-%20Beginning%20PHP
 
Best Practices For Drupal Developers By Mir Nazim @ Drupal Camp India 2008
Best Practices For Drupal Developers By Mir Nazim @ Drupal Camp India 2008Best Practices For Drupal Developers By Mir Nazim @ Drupal Camp India 2008
Best Practices For Drupal Developers By Mir Nazim @ Drupal Camp India 2008
 
FLossEd-BK Tequila Framework3.2.1
FLossEd-BK Tequila Framework3.2.1FLossEd-BK Tequila Framework3.2.1
FLossEd-BK Tequila Framework3.2.1
 
Php tutorial
Php tutorialPhp tutorial
Php tutorial
 
php 1
php 1php 1
php 1
 
Drupal7 Release Party in Luxembourg
Drupal7 Release Party in LuxembourgDrupal7 Release Party in Luxembourg
Drupal7 Release Party in Luxembourg
 
Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress
 
Save time by applying clean code principles
Save time by applying clean code principlesSave time by applying clean code principles
Save time by applying clean code principles
 
Php mysql ppt
Php mysql pptPhp mysql ppt
Php mysql ppt
 
Phphacku iitd
Phphacku iitdPhphacku iitd
Phphacku iitd
 
Future proofing design work with Web components
Future proofing design work with Web componentsFuture proofing design work with Web components
Future proofing design work with Web components
 

Kürzlich hochgeladen

Kürzlich hochgeladen (20)

Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 

Twig for Drupal 8 and PHP | Presented at OC Drupal

  • 1. TWIG Drupal 8, It’s in Core OCPHP / OC Drupal @ocphp
  • 2. ME • PHP Application Developer
 Who happens to do Drupal
 Who also likes to dabble in frontend • Experience with Twig is in Silex, a micro-framework built on Symfony • Been organizer of OCPHP for nearly 8 years and OC Drupal around ~4 years
  • 3. THE PRESENTATION A little less about Drupal and more just about Twig Picture and Demo free
  • 4. WHAT IS TWIG • A PHP Template Engine to separate Presentation Layer from the Controller/Model (PHP) • Developed by same people behind Symfony; yes, that’s in Drupal 8 Core too
  • 6. BUT PHP WAS JUST FINE, WHY TWIG ? • Mixed PHP with HTML can be just plain sloppy and hard to read • PHP still has to scan html documents looking for all those <?php tags amongst the HTML • Designers have too much power and can open security bugs in the presentation layer with PHP • Defining a function or filtering for theming was sloppy — no real standard way
  • 7. I DON’T WANT MORE BLOAT • PHP is definitely faster but Twig is safer As a developer, you control the PHP executed in a template. No possible coding hacks like this in Templates … 
 • 
 <?php $user = db_query(“SELECT n.nid FROM users WHERE uid = “. $_GET[‘uid’].“)”; ?> • Obviously a bit more execution time and memory but Twig has been around for a while, tested, and aims to be fast ! Generated PHP will run through OPCode. • Twig caches the generate PHP code so only changes are re-generated
  • 8. Besides … In Drupal, Twig is the least of your worries when it comes to bloat. Rendered Arrays
  • 9. SO WHAT ARE THE BENEFITS
  • 10. BENEFITS • An extendable template engine • Secure (can enable variable output escaping globally) • It’s Unit Tested • Great documentation and online resources • Not coupled to Symfony so it has its own roadmap and community
  • 11. EVEN MORE BENEFITS • Easy to understand clean syntax • Extend it and create your own filters or functions to give designers to use • Once you know it, can use it in other PHP frameworks outside of Drupal • Syntax support in several IDEs (PHPStorm)
 http://blog.jetbrains.com/phpstorm/2013/06/twig-support-inphpstorm/
  • 13. …STOP WHINING, IT’S PRETTY EASY…
  • 14. PRINT OUTPUT <?php print $user[‘name’]; ?> ! ! {{ user.name }}
  • 15. COMMENTS depending on developers mood <?php // …. ?> <?php /* …. ?> ! {# Comment #}
  • 16. FILTERS <?php t(‘Welcome, ’ . $user[‘name’]); ?> ! {{ ‘Welcome, @name’|t({ ‘@name’: user.name }) }}
  • 17. COMBINING FILTERS <?php strtoupper(t(‘Welcome, ’ . $user[‘name’]);) ?> ! {{ ‘Welcome, @name’|t({ ‘@name’: user.name }|upper) }}
  • 18. IF <?php if (isset($user[‘name’])) { echo $user[‘name’] } else { echo ‘Who are you?’ }; ?> ! {% if user.name is defined %} {{ user.name }} {% else %} Who are you? {% endif %} ! Not testing, but following might work too {% user.name|default(‘Who are you’) %}
  • 19. LOOPS <?php foreach ( $users as $key => $user ) { print $user[‘name’]; } ?> ! {% for key, user in users %} {{ user.name }} {% endfor %}
  • 20. CONTROL WHITESPACE use - in output or function tags ! {{- user.name -}} ! {%- if user.name is defined -%}{%- endif -%} !
  • 21. CALCULATIONS <?php print $user[‘total’] + 1; ?> ! {{ users.total + 1 }} ! !
  • 22. CONCAT / SET STRINGS <?php print strtolower(‘’Greeting ‘ . $user[‘first’]); ?> ! {% set greeting = 'Hello ' %} {% set name = user.first %} ! {{ greeting ~ name|lower }} {# Hello bob #} ! {{ (greeting ~ name)|lower }} {# hello bob #}
  • 23. EXPRESSIONS {% if 1 not in [1, 2, 3] %} ! {% if 'cd' in 'abcde' %} ! {% if 'Bob' starts with 'B' %} ! {% if phone matches '{^[d.]+$}' %} ! http://twig.sensiolabs.org/doc/templates.html#twig-expressions
  • 24. LOGIC WITH EXPRESSIONS PHP: && || <> ! and or not ! {% if user.name is not defined or user.name == ‘Bob’ %} ! http://twig.sensiolabs.org/doc/templates.html#twig-expressions
  • 25. EXTENDING Don’t duplicate the whole twig file just to change a single piece of output. Extend it. ! {% extends ‘layout.html.twig’ %} ! or if layout = “layout.html.twig” was set as Twig Global/var ! {% extends layout %}
  • 26. CONDITIONAL EXTENDS (mobile variable is set in code and passed to template) ! {% extends mobile ? “mobile.html.twig" : “layout.html.twig” %} ! ! !
  • 27. BLOCKS Define content in blocks to allow for extending of templates ! ! {% block sidebar %} …content… {% endblock %} ! !
  • 28. OVERRIDING BLOCKS The benefit of extending and defining blocks in a template. ! Any child template can override just that block content from the parent template without having to change any other html ! !
  • 29. OVERRIDING BLOCKS {% extends '/core/modules/system/tests/modules/twig_theme_test/ modules/twig_namespace_a/templates/test.html.twig' %} ! {% block content %} I just overrode the content block in the parent template. {% endblock %} ! !
  • 30. INCLUDE OTHER TEMPLATES {% extends ‘layout.html.twig’ %} ! {% include ‘sidebar-left.html.twig’ %} ! {% block content %} I just overrode the content block in the parent template. {% endblock %} ! ! !
  • 32. DEBUG IN DRUPAL 8 In settings.php, uncomment …. ! # $settings['twig_debug'] = TRUE; # $settings['twig_auto_reload'] = TRUE; # $settings['twig_cache'] = FALSE;
  • 33. DEBUG IN DRUPAL 8 ! {{ dump(user) }} ! ! ! Since Twig process the template into a generate PHP file, don’t believe you can step through with XDebug and IDE like PHPStorm. (??)
  • 34. TWIG LOOKS GREAT ! BUT NOW WHAT ? ! It’s a huge undertaking to replace the theme layer and currently still progressing but several templates have been converted: views, base templates, etc. ! Twig Initiative ToDo List ! https://groups.drupal.org/node/278968
  • 35. D7 TO D8 TEMPLATES Extensive work required but checkout Twigify ! Twigify is a module for converting Drupal 7 PHP Template themes to Drupal 8 Twig themes. It was presented/demoed at Drupalcon Portland (BOF) and at numerous US camp sessions, and also in the Twig Lab at Drupalcon Prague. ! https://drupal.org/node/2099611 !
  • 38. RESOURCES • On IRC, #drupal-twig • (Do something about Drupal theming) http://jacine.net/post/19652705220/theme-system • (YouTube DrupalCon Portland) http://www.youtube.com/watch?v=tPJ6LRJN0nw&feature=youtu.be • (Twig) http://twig.sensiolabs.org/ • (Twiggy - sample template by Jen Lampton) https://github.com/jenlampton/twiggy/tree/master/templates • (Twig in Drupal 8 slides) http://www.slideshare.net/Wizzlern/twig-in-drupal8 • (Twig support in PHPStorm) http://blog.jetbrains.com/phpstorm/2013/06/twig-support-in-phpstorm/ • (Twig coding standards) http://twig.sensiolabs.org/doc/coding_standards.html • (Debugging in Twig) https://drupal.org/node/1906780 • (Current ToDo List) https://groups.drupal.org/node/278968 • (Drupal 8 and power of Twig) http://rootwork.org/blog/2013/05/drupal-8-power-twig-drupalcon-portland-featured-session • (Twig Performance) http://www.appneta.com/blog/twig-performance/