Séverin Bruhat

<< Back to the list

Drupal : afficher les "blocks" d'une région dans un template de node

26 November 2014

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 ?

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.