Aller au contenu principal


Créer un gabarit

Pour décrire la création d'un gabarit d'affichage, je vais prendre pour exemple la création du gabarit "block--tagclouds.html.twig" qui , sur ce site, permet un affichage personnalisé des mots-clés définis grâce au module "tagclouds".
Pour cela, sur mon site de développement, j'ai :

  1. paramétré le mode "debug" ;

  2. installé le module twig_vardumper.

Pensez à vider les caches (/admin/config/development/performance) pour visualiser les modifications que vous effectuez sur vos fichiers de gabarits.
Billet créé le :
28 Mar 2022
Dernière MAJ :
07 jan 2025

Le module "twig_vardumper" permet la découverte et l'analyse de façon extrément conviviale des variables disponibles dans un bloc "drupal". Il fournit la fonction vardumper() que l'on utilisera en lieu et place de dump(_context|keys).

1. Découverte des noms de gabarits disponibles

Comme indiqué sur la page "/GererSite/Theming/Gabarit", une inspection du code (par exemple avec les outils de développement de "Firefox"), illustrée par l'image ci-dessous, nous indique quel(s) gabarit(s) peu(ven)t être utilisé(s) pour afficher les données.

Cliquer pour agrandir l'image

Par conséquent, j'ai choisi de créer le fichier "block--tagclouds.html.twig" que je place dans le dossier "templates/block" de mon thème.

information complémentaire disponible en cliquant ici

Il est également possible de copier le fichier indiqué à la suite de "<!--BEGIN OUTPUT from" depuis un thème existant ou un module du cœur puis de le modifier selon ses besoins. Pensez à vider les caches pour visualiser vos modifications.

Ces gabarits figurent dans la variable "theme_hook_suggestions". Pour les visualiser, on peut aussi insérer ce code dans le gabarit que l'on analyse :

<p>les gabarits suggérés pour cette page sont :
<ol>
{% for key, value in theme_hook_suggestions %}
<li>{{ theme_hook_suggestions[key]}}</li>
{% endfor %}
</ol>
</p>

Notez :

  1. il faut remplacer les "underscore : " par des "tiret : -" pour obtenir la syntaxe correcte du nom du gabarit.
    Par exemple, si le gabarit "node__billet" figure dans la liste des gabarits suggérés alors le fichiers template à créer se nommera "node--billet.html.twig".
  2. le template pour le noeud 35 (ie : la page /node/35 du site) se nomme "node--35.html.twig". Une astuce intéressante pour une mise en page dédiée à une page spéciale du site.

2. Découverte des variables disponibles

Lire la documentation officielle.

Consulter la page "gestion des erreurs" pour lire comment afficher les erreurs de programmation ou de syntaxe et ne pas être perdu si la page blanche "le site web a rencontré une erreur inattendue, ressayer plus tard" s'affiche.

Version 0 du fichier :

La version 0 de mon fichier était réduite à la seule ligne de code

{{vardumper()}}

qui affiche, comme le montre la figure ci-dessous la liste (array) des 21 variables disponibles dans ce bloc.

Cliquer pour agrandir l'image

Dans ce tableau à 21 entrées je vais utiliser :

label : le "nom du bloc" tel que défini lors de sa mise en place dans "structure-mise en place des blocs" qui vaut "mots clé (etude)".

content : le contenu du bloc. Cette variable a , elle aussi, la structure "array". Elle a 3 entrées.

Cliquer pour agrandir l'image

Un clic sur le triangle détaille ces 3 entrées (cf figure ci-dessus) :

"#attached" : un tableau à 1 entrée.

"0" : un tableau à 1 entrée identifiée "tags" :

"tag" est un tableau à 20 entrées

"1": un tableau à 3 entrées  :

#type

#title

#url

Version 1 du fichier :

la version 1 de mon fichier était réduite à la seule ligne de code ci-dessous qui produit l'affichage du contenu du tableau "tags"

{{ content[0] }}

qui est bien la variable d'index "0" du tableau "content" .
Il s'agit bien de la liste des mots clé (liste réduite à la taille qui est configurée dans "structure-mise en place des blocs" pour le bloc "mots clé").

Ajoutons les lignes de code :

</br> {{ content[1]["#url"]}}
</br> {{ content[1]["#title"]}}

qui ajoutent à la liste des mots clé :

une URL (le contenu de la variable d'index "#title" de content[1] (le tableau index "1" du tableau "content" ) ;

et un titre (le contenu de la variable d'index "#url" de content[1]).

Version 2 du fichier :

Une légère mise en forme produit l'affichage souhaité :

1. {% block content %}
2. <div class="dh_tagclouds">
3. <div>
4. {{content[0]}}
5. </div>
6. <div>
7. </br>
8. <a href="{{content[1]["#url"]}}">
9. <img src="http://localhost/themes/custom/dhv4/css/images/plus.png"
10. alt="{{content[1]['#title']}}" height="20" width="50">
11 </a>
12. </div>
13. </div>
14. {% endblock %}

En ligne 4, on retrouve l'affichage de la liste des mots clé.
En lignes 8 à 11, l'affichage du lien sous forme d'une image

La classe "dh_tagcloud" se résume à :

.dh_tagclouds {
display : flex;
}

Version finale du fichier :

Il ne reste qu'à ajouter un titre au bloc. Celui-ci est le contenu de la variable "label".

{% if label %}
<h2>{{ label }}</h2>
{% endif %}

Encadrons finalement l'ensemble du code par les balises <section> et <\section>.

La version finale du fichier se trouve dans l'onglet ci-dessous.

L'image ci-dessus présente les portions de code étudiées et leur rendu sur la page web du site.

Cliquez sur le bouton pour copier le code dans le presse papier
<section role="le-bloc">
    {% if label %}
<h2>{{ label }}</h2>
{% endif %}
{% block content %}
<div class="dh_tagclouds">
<div>
{{content[0]}}
</div>
<div>
</br>
<a href="{{content[1]["#url"]}}">
<img src="http://localhost/themes/custom/dhv4/css/images/plus.png"
alt="{{content[1]['#title']}}" height="20" width="50">
</a>
</div>
</div>
{% endblock %}
</section>