Drupal 7 : supprimer le titre pour certains types de contenu
Il peut être utile dans certains cas de supprimer l'affichage du titre sur des types de contenu.
Mais pour quelles raisons aurais-je besoin de faire ça ?
Dans Drupal, l'affichage du titre du contenu se fait en dehors du "nœud". C'est-à-dire que le titre sera forcément à un niveau supérieur par rapport au contenu et donc complètement détaché de celui-ci. Si l'on décortique les fichiers de template d'un thème, nous devrions trouver ce bout de code dans un fichier nommé page.tpl.php.
<?php if ($title): ?>
<h1 class="title"><?php print $title; ?></h1>
<?php endif; ?>
Ici, le titre est bien affiché dans la page (page.tpl.php) et non dans le node (node.tpl.php).
Mais dans certains cas, il peut être utile d'avoir le titre au même niveau que le contenu, c'est-à-dire dans le fichier node.tpl.php. Cela peut être pour une raison de mise en page par exemple.
Mais comment faire ?
Imaginons que nous avons un type de contenu nommé "article" et que nous devions inclure le titre à l'interieur du fichier de template du node.
Dans un premier temps, nous allons faire une copie du fichier node.tpl.php et le renommer node--article.tpl.php. Ainsi, nous aurons un fichier de template entièrement dédié à l'affichage des contenus de type "article".
Ensuite, nous allons rajouter la variable du titre ainsi que son HTML dans le fichier node--article.tpl.php. L'idée est d'inclure le bout de code à l'endroit le plus approprié pour notre besoin.
<h1 class="title"><?php print $title; ?></h1>
Ne pas oublier de vider le cache de Drupal afin que le nouveau fichier de template soit bien pris en compte !
Normalement, vous devriez voir le titre du contenu apparaitre à l'endroit où vous avez placé votre code.
Mais voilà ! Nous avons laissé le titre dans le fichier page.tpl.php. Donc, il apparaît deux fois sur la page : une fois en dehors du contenu et une fois à l'intérieur du contenu.
Pas de souci ! Nous allons directement dire à Drupal de ne pas afficher ce titre pour le contenu "article". Vous vous rappelez de la condition pour afficher le titre dans le fichier page.tpl.php ?
<?php if ($title): ?>
<h1 class="title"><?php print $title; ?></h1>
<?php endif; ?>
Et bien nous allons nous servir de cette condition pour passer la valeur de $title à FALSE.
Tout se joue dans le fichier template.php de votre theme avec la fonction NOMDUTHEME_preprocess_node().
function NOMDUTHEME_preprocess_node(&$vars, $hook) {
// Hide Node Title for certain content type.
if(isset($vars['node'])) {
switch ($vars['node']->type) {
case 'article':
$vars['title'] = FALSE;
break;
default:
break;
}
}
}
Ici, la variable $vars['title'] correspond à notre variable $title dans le fichier page.tpl.php.
Avec cette fonction, nous passons directement la valeur de cette variable à FALSE.
Après vérification, vous ne devriez plus voir le titre du contenu qui était en dehors du contenu.
Et voilà !!!
Illustration par James Osborne de Pixabay