Blog

Theming : les changements avec Drupal 8

Outre l'utilisation de symfony 2, Drupal 8 débarque avec un nouveau moteur de template : Twig.

Depuis sa création Twig a confirmé être un moteur de template fiable et rapide en faisant partie intégrante de Symfony depuis 2009.

Les avantages de twig : 

  • Plus sécurisé grâce au possibilité limité de sa syntaxe (notamment l'absence de PHP)
  • Plus de PHP et de HTML dans le même fichier
  • Réutilisabilité des templates grâce aux includes
  • Bonne documentation
  • Syntaxe facile à apprendre

Les inconvénients de twig :

  • Nouvelle syntaxe à apprendre
  • Quelques problèmes de mémoire et de performance à cause du moteur supplémentaire

Arborescence d'un thème :

Voici comment se présente les différentes templates dans le thème de base de Drupal 8 :


On voit donc que l'arborescence des fichiers d'un thème reste plus ou moins semblable à Drupal 7, la grosse différence vient des différentes extensions des fichiers (.html.twig au lieu de .tpl.php)

Exemple de code avec Twig :

Voici un exemple d'un template sur Twig (ici une partie de node.html.twig) :

<div class="meta submitted">
	{{ user_picture }}
	{{ submitted }}
</div>

On constate donc la disparition totale du language php, plus besoin de printer les variables, on utilise la syntaxe {{ }} avec le nom de la variable.

On constate aussi la facilité de descendre dans l'arborescence d'une variable, plus besoin de savoir s'il s'agit d'un array ou bien d'un objet, Twig simplifie cet aspect :

{{ content.links }}

Dans cet exemple on accède au champ links de notre node très simplement au lieu d'utiliser la syntaxe de Drupal 7 : 

print $content['links']

Pour mieux se rendre compte de l'impact de Twig voici une petite comparaison entre un template de Drupal 7 et de Drupal 8 :

PHP template :

<div id="taxonomy-term-<?php print $term->tid; ?>">
	<?php if (!$page): ?>
	<h2><?php print $term_name; ?></h2>
	<?php endif; ?>
	<div class="content">
	<?php print render($content); ?>
	</div>
</div>

Twig :

<div id="taxonomy-term-{{ term.tid }}"{{ attributes }}]]>
	{% if not page %}
	<h2>{{ term_name }}</h2>
	{% endif %}
	<div class="content"]]>
	{{ content }}
	</div>
</div>

On peut donc voir que le code de Twig est beaucoup plus lisible, plus besoin de balises php qui alourdisse le code et le rende peu lisible, les print(render($content)) deviennent {{ content }} et les conditions sont beaucoup plus faciles à lire …

Suite à la disparition des balises PHP, on peut se demander comment Twig gère la balise t utilisée pour les traductions. Voici la différence :

Avec Twig : 

{{ 'Home' | t }}

Avec PHPTemplate :

<?php print t('Home'); ?> 

En conclusion, Twig apporte une plus grande facilité dans le maniement des variables ainsi qu'une meilleure lisibilité du code. Cependant, une phase d'apprentissage est bien sur nécessaire pour maitriser la syntaxe.

 

Ces articles peuvent également vous intéresser :

Ajouter un commentaire