Autopsie d'un gabarit

Ce billet décrit la création du  gabarit "block--tagclouds.html.twig" du site qui a pour objectif l'affichage personnalisé des mots-clés définis grâce au module "tagclouds".
Pour cela, sur mon site de développement, j'ai

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().

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 gabarit peut être utilisé pour afficher les données du bloc.

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.

2. Découverte des variables disponibles

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

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

  • #attached : un tableau à 1 entrée
  • 0 : un tableau à 1 entrée identifiée "tags"
  • 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. Son objectif est l'affichage du contenu de la variable "tags"

{{ content[0] }}

qui affiche le contenu de 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"

Ajoutons les lignes

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

qui ajoute à la liste des mots clé  :

  • un lien ( le contenu de la variable d'index "#title" de content[1] (le tableau index "1" du tableau "content" ) ;
  • et son 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é :

    {% 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 %}

En ligne 4 on retrouve l'affichage de la liste des mots clé.
En ligne 5,6,7,8 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.

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>