Drupal : afficher les « blocks » d’une région dans un template de node

Voici comment afficher les blocks positionnés dans une région, directement depuis une surcharge de template node plutôt que dans le page.tpl.php.

WTF ?

Ok c'est pas très clair, voici quelques explications. Drupal permet de définir des régions dans lesquelles sont affichés des "blocks". Pour ce faire, il est nécesssaire de déclarer la région au niveau fichier ".info" du thème de la manière suivante :

regions[col_droite] = Colonne de droite 

Ensuite, au niveau du fichier page.tpl.php, il est possible d'afficher le contenu de la région :

echo render($page['col_droite']);

Dans l'administration des "blocks" proposée par Drupal, vous pouvez ensuite choisir dans quelle région afficher votre block :

Capture Colonne de droite

Nous parlons ici du cas idéal, prévu dès la conception du projet. Mais voilà, ça ne se passe pas toujours comme ça ! Imaginez que vous preniez un projet en cours, et que vous deviez rendre un contenu, qui apparait souvent en colonne de droite dans les fichiers de template, dynamique et administrable via les blocks de Drupal. En gros, vous devez rendre dynamique quelque chose de statique mais la région n'existe pas dans le page.tpl.php, pire que ça, il n'est pas possible d'ajouter la région sans modifier tous les templates. Il y a là un gros problème de conception…. En effet, les régions sont exploitables uniquement dans le fichier page.tpl.php, impossible de faire un "render($page[‘col_droite’])" dans le template node.

Mais alors comment faire ?

  • Pour commencer, ajoutez une région ("col_droite") dans le fichier ".info" du thème comme précisé ci-dessus.
  • Créez ensuite votre block (via du code ou views) et positionnez-le dans la région en question ("Colonne de droite"). Jusqu'ici rien ne se passe au niveau du front-office, normal on n'a encore pas demandé d'afficher les bocks de la région.
  • Editez le template de node (ou créer une surcharge, ex : node–page2col.tpl.php [oui c’est sale, mais n’oubliez pas qu’on traite justement ce cas-là !]) et ajoutez le code suivant où vous souhaitez afficher les blocks de la région "Colonne de droite" :
print render(block_get_blocks_by_region('col_droite')); 

Et voilà, votre page affiche maintenant le blocks de la colonne de droite alors que cette région n'est pas définie au niveau du fichier page.tpl.php de Drupal. Cette solution est également compatible avec la gestion de l'affichage spécifique sur certaines pages :

J'espère que ce petit tuto vous sera utile, le jour où vous serez confronté à cette situation.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

code