Your SlideShare is downloading. ×
Use Symfony2 components inside WordPress
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Use Symfony2 components inside WordPress


Published on

Published in: Technology
  • Be the first to comment

No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

No notes for slide


  • 1. Use Symfony2 components inside WordPress (…and live happily)
  • 2. Walter Dal Mut  Cofounder at Corley S.r.l.  First level degree Electronic Engineering  Ungraduated student of Computer ScienceMaurizio Pelizzone  Cofounfer at Mavida S.n.c  WordPress Lover
  • 3. Symfony2 is a reusable set of standalone,decoupled, and cohesive PHPcomponents that solve common webdevelopment problemsFabien Potencier
  • 4. Use Composer autoload in your theme
  • 5. WordPress & Monolog
  • 6. Monolog is a logging library for PHP 5.3used by Symfony2. It is inspired by thePython LogBook library.
  • 7. Get MonologWebsite: Monolog:Create a new composer.json file{ "require": { "monolog/monolog": "1.1.*" }}curl -s | phpphp composer.phar install
  • 8. wrap inside WordPress…
  • 9. … and use in your theme
  • 10. WordPress & Assetic
  • 11. Assetic is an asset managementframework for PHP.Assetic is based on the Python webassetslibrary
  • 12. Get AsseticWebsite: Assetic:Create a new composer.json file{ "require": { "kriswallsmith/assetic": "v1.0.4" }}curl -s | phpphp composer.phar install
  • 13. GOAL: Merge, Minimize and Compile alljavascript loaded through WordPress
  • 14. Code example:
  • 15. WordPress & Twig
  • 16. Twig: the flexible, fast, and securetemplate engine for PHP.Twig uses a syntax similar to theDjango and Jinja templatelanguages which inspired the Twigruntime environment.
  • 17. Why using a Template Engine ?
  • 18. PHP doesnt support many features moderntemplate languages should have nowadays o Concision o Template oriented Syntax o Reusability o "Security" by default  Ill explain in the next slides  Read more on dedicated webpages.Read more at:
  • 19. ConcisionPHP TWIG<?php echo $name ?> {{name}}<?php echo {{name|escape}} htmlspecialchars( $name, ENT_QUOTES, No short version its UTF-8) already the short?>Short tags version.<?=$name?>Using short tags could creates problems. You have to enable the short tags that are disabled by default.
  • 20. Template oriented SyntaxPHP TWIG<?php if ($items): ?> {% for item in items %} <?php foreach ($items as $item): ?> * {{ item }} * <?php echo $item ?> {% else %} <?php endforeach; ?> No item has been found.<?php else: ?> {% endfor %} No item has been found. <?php endif; ?> Its more clear and use a new syntax.
  • 21. Reusability<!-- base.html --> <!-- index.html --><html {% extends "base.html" %} xmlns="" xml:lang="en" lang="en"> {% block head %} <head> {{ block.super }} {% block head %} <link rel="stylesheet" href="main.css" /> <link rel="stylesheet" href="main.css" /> {% endblock %} {% endblock %} </head> {% block content %} <body> Index content {% block content %}{% endblock %} {% endblock %} </body></html>
  • 22. Security" Im not saying PHP is not a secure language, far from it. But needless to say thatescaping a variable in a template is just a nightmare." Sometimes, security should be enabled by default, especially for templates writtenby non-developers who are not necessarily aware of the common web threats like XSSor CSRF. @fabpotPHP TWIG Output is escaped by default.<?php echo htmlspecialchars( {% autoescape off %} $var, {{ object.as_html }} ENT_QUOTES, {% endautoescape %} UTF-8) ?> Im well aware of the automatic output escaping problems.
  • 23. Get TwigWebsite: http://twig.sensiolabs.orgTwig C Extensions: composer:Create a new composer.json file{ "require": { "twig/twig": "1.*" }}curl -s | phpphp composer.phar install
  • 24. Twig & WordPressUsing Twig into a wordpress plugin/theme could simplify and improve the development.• Plugin development (views)• Theme development
  • 25. Integrating Twig into a PluginJust initialize Twig and use it. Using a static reference to share the Twig instance (simple way).function get_twig(){ static $twig; if (!$twig) { $loader = new Twig_Loader_Filesystem(__DIR__ . /templates); $twig = new Twig_Environment($loader, array(cache => false)); } return $twig;}
  • 26. Render a templateDuring the Twig initialization we specify the view location ("templates" folder). Now you can create a Twig view and save it. Into your plugin just link to it:$template = get_twig()->loadTemplate(tweets.twig);echo $template->render(array(elements => $unpack));In this example we load the "tweets.twig" view and pass the elements variable.
  • 27. WP Plugin ExampleYou can checkout an example at:• this example we add a widget into the admin dashboard that shows tweets of @CorleyCloud account.
  • 28. Make a template using TwigWordPress is designed to use PHP as template engine. We can force to integrate Twig as the default templating system. You can find an example of integration at: example realize a simple blank template with some WP functionalities (sidebars, posts, pages, archives).
  • 29. Making a Twig ProxyWordPress uses a lot of functions to generate pieces of html. To speedup the Twig integration we can create a simple proxy that enable WP functions into a Twig template.class TwigProxy { public function __call($function, $arguments) { if (!function_exists($function)) { throw new Exception("{$function} not exists."); return NULL; } return call_user_func_array($function, $arguments); }}
  • 30. Using the Twig ProxyThis proxy allows us to call WordPress functions into a view.<div id="sidebar"> {% if not wp.dynamic_sidebar("Sidebar Widgets") %} {{ wp.get_search_form }}<!-- continue --></div>"dynamic_sidebar" and "get_search_form" are WP functions.
  • 31. Load Twig templates instead PHPsWe can use WordPress hooking system to override the default template loading.• add_filter o home_template o single_template o page_template o 404_template o archive_template o Etc, etc...• add_action o template_include  Engage Twig and prepare data to view.
  • 32. Layout managementInstead of use get_header and get_footer that break HTML we can use template inheritance of Twig.{% extends "base.twig" %}{% block title %} {{ parent() }} | Page Not Found{% endblock %}{% block content %}<h2>Error 404 - Page Not Found</h2>{% endblock %}
  • 33. Enjoy with TwigTwig is extremely simple and powerful, you can play and enjoy with this great template engine and get more power during your wp development. Have a nice day
  • 34. ?
  • 35. Thank you! Walter Dal Mut @wdalmut Maurizio Pelizzone @miziomon