Upload
ryan-weaver
View
20.849
Download
0
Tags:
Embed Size (px)
DESCRIPTION
A presentation about Twig - the friendly templating engine written in PHP - given in San Francisco for Symfony Live 2011.
Citation preview
being dangerous with Twiga short story by Ryan Weaver
February 9, 2011
Symfony Live 2011
A 5-step guide to using Twig – the fast, secure andextensible PHP templating engine – to create clean
template code, leverage powerful filters, make your designerswrite you love letters, write template functions that don't clog up your
global PHP namespace, take advantage of true template inheritance, hang out with Django programmers and be able to talk template syntax, enjoy true and non-invasive output escaping, have more time for your family, control whitespace, add global
variables to all templates, stop lying when you try to tell yourself that <?php echo looks better than asimple {{, use the fancy for-else control, Rock some macros – little reusable code functions, do awesome stuff like “{% if i is divisibleby 2 %}”,
mediate in the simplicity of your templates and drink more green tea, sandbox your template and whitelist capabilities – allowing Twig to be used in a CMS,take advantage of the fact that all templates compile to PHP classes that can extend a base class of your choosing, impress your friends by changing the print tag from
{{ var }} to [all-your-base] var [are-belong-to-us], confuse the guy next to you by changing “is” and “is not” to mean the opposite things and convince him that he's misunderstoodhow logical expressions are used in programming languages all along, create a custom tag that takes the body of its block and tweets it,
write templates the expresses presentation and not program logic.
Ryan WeaverSymfony Live 2011
being dangerous with Twig
@weaverryan
» symfony
» documentation
» collaboration
» the lovely @leannapelham
● Advertising & Integrated Marketing Solutions
• coming to you from» Nashville, TN» Washington, D.C.
• 150 employees
• and we're hiring!
iostudio: flying the symfony flag
Why Twig?
act 1
because template engines are awesome
Template engines
A template engine allows you to render apresentation (HTML, XML, etc) via a templatein a controlled environment
It should allow special functionality thatmakes creating templates easier (helpers,template inheritance, etc)
a template engineis a tool
why not just renderPHP templates?
PHP templating woes
» rendering template files is a hack: an include statement with output-buffering control
» no or faked template inheritance
» no isolation: PHP templates suck in any global variables or functions available
we need the brevity of templates
with the isolation of object-oriented programming
so give me some Twiggy pudding
Twig is:» fast» flexible» concise» secure» fully-featured» Extensible» designer-friendly
http://www.twig-project.org
Twig offers:» true inheritance» real output escaping» tons of filters» custom tags» great documentation» global variables» the “for-else” control
Twig is concise
and each template compiles to an actual
PHP object
seeing is believing
a moment oftemplating zen
“The template system is meant to express presentation, not program
logic.”
- Django documentation
Twig can easily be used anywhere
act 2
Twig's simple life
Twig's three tags
Twig parses just three simple tags:
» comment tag
» print tag
» block tag
a. do nothing (comment tags)
{# comment #}» totally ignored when rendered
b. say something (print tags)
{{ 'print me!' }}» prints the given expression» think “<?php echo”
» If you're ultimately printing something, use this tag
c. do something (block tags)
{% set foo = 'inside a block tag' %}» used mostly for control-flow statements like if, for,
include and block» can have beginning and end tags
» if you're *doing* something and not *printing* something, use this tag
Twig's three tags
» do nothing: {# comment tag #}
» say something: {{ print tag }}
» do something: {% block tag %}
it's just that simple
act 3
Everything is anexpression
expressions: Twig guts
» like PHP, most everything inside a tag is an expression
» expressions are the most interesting and flexible part of Twig
Expressions Block names
Block-specific tokens
an expression can consist of many different things
strings, variables, arrays, functions, filters, tests,
subscripts...
strings, numbers and variables
» like any language, strings, numbers and variables are commonplace
arrays and hashes
» arrays use [], hashes use {}
operators
» twig has operators just like PHP, but extensible and with some extras
filters
» a filter always follows a pipe (|) and modifies the value that precedes it
» a filter may or may not take arguments
functions
» just like PHP, returns a value based on some input
twig expresses himself
» strings, numbers and variables
» arrays and hashes
» operators
» filters
» functions
hey – it's simple like PHP, but flexible...
act 4
twig on the battlefield
the test...
» a template that displays a list of “widgets” inodd-even rows
» render tags and other info about each widget
» create basic, clean pagination
block tag
print tag
Let's clean things up
filter to title-casethe widget name
filters to strip tagsand shorten thewidget's description
your presenter is lying to you...
» the “truncate” filter isn't part of Twig, butis available via a repository of extensions
» Everything in Twig is loaded via an Extension(even the core stuff)
» Extensions are easy to use and create – we'llprove it later
* https://github.com/fabpot/Twig-extensions
odd/even classeslike a boss
Twig function cycles throughthe given array items
Special variable available insideall “for” loops.
The “loop” variable knows othertricks like “loop.last” and“loop.revindex”
flex some filters
apply the date filter
chain filters to turn a list of tagsinto a comma-separated list
convenience,readability
even managementknows what this does
pagination?
function returns a positiveradius of numbers around thecenter (e.g. 3, 4, 5, 6, 7)
the awesome loop variable tells uswhen we're in the last iteration
the audacity: your speaker just lied again
» but.... the “radius” function doesn't actuallyexist in Twig.
but since it's pretty handy, let's create it!
act 5
Twig extensions
Twig extensions
everything in Twig is loaded by an “Extension” class:
» filters
» functions
» operators
» tests (e.g. divisbleby)
» custom tags
Extensions are EASY!
step 1: create a class that extends Twig_Extension
step 2: tell Twig about the extension
step 2: tell Twig about the extension (Symfony2)
* don't forget to import this file from your application's configuration (i.e. app/config/config.yml)
step 3: add some guts to the extension class
* buy a round of drinks
* watch the sun set
* kiss that cute girl at the coffee shop
step 4: Celebrate!!!
I want more!
ok great – do some reading!
» http://www.twig-project.org/doc/advanced.html
» http://www.twig-project.org/doc/extensions.html
seriously – the Twig docs are quite excellent
act 6
after-dinner mint
mmm
screw with the Twig syntax
» because Twig is totally sandboxed (i.e. you
control exactly what can and cannot be done
inside a template, Twig is a perfect fit for a CMS.
» and if Twig's syntax scares your clients... change it!
cool, what aboutdebugging?
a debug tag ships withthe twig-extensions
the “debug” extension is available for youin Symfony2 - just enable it
prints every variableavailable
prints the foo variable
but we've only justscratched the surface
there's much much more
» inheritance
» macros (reusable code bits)
» subscripts
name can be: * an item on an array * property on an object * getName()
or you can force it to*just* fetch “name”as an array item
Twig, he's a people-person
» Twig's loves contributions, so *get involved*!
» https://github.com/fabpot/twig
» https://github.com/fabpot/twig-extensions
» http://groups.google.com/group/twig-users
Ryan [email protected] [at] thatsquality.com
thank you
reach out to me – i'd love to hear from you!
http://joind.in/talk/view/2601
comments, feedback, questions