Comment puis-je modifier ou prétraiter la balise <body>
pour ajouter le corps de la classe? Je ne veux pas créer un fichier html.tpl.php complet, juste pour ajouter une classe.
Dans le fichier template.php
de votre thème, utilisez le hook preprocess_html
:
function mytheme_preprocess_html(&$vars) {
$vars['classes_array'][] = 'new-class';
}
N'oubliez pas de vider les caches une fois que vous avez implémenté le hook ou que Drupal ne le détecte pas.
La documentation du modèle html.tpl.php documente les variables $classes
en tant que Chaîne de classes pouvant être utilisées pour un style contextuel via CSS. Si vous examinez le code du modèle, cette variable est utilisée dans les attributs de classe de l'élément body produit:
<body class="<?php print $classes; ?>" <?php print $attributes;?>>
Les variables $classes
sont en fait déjà définies par template_process()
pour tout fichier de modèle et sont construites à partir du contenu de la variable $classes_array
.
Donc, pour ajouter une classe au corps de votre page, vous devez ajouter cette classe à la valeur $classes_array
à partir de l'implémentation de hook_preprocess_html()
de votre thème (ou module):
function THEME_preprocess_html(&$variables) {
$variables['classes_array'][] = 'new-class';
}
Comme il s'agit du modèle et de la fonction de processus définis par core, tout thème qui se comporte bien doit réutiliser les mêmes variables.
J'ai dû utiliser différentes clés de tableau dans le même crochet pour que cela fonctionne:
function THEME_preprocess_html(&$vars) {
$vars['attributes_array']['class'][] = 'foo2';
}
Le module Context vous permet également d'ajouter une classe à la balise body.
Cela peut être utile si vous avez besoin d'ajouter la classe sous certaines conditions.
Vous trouvez ces options sous la réaction "Thème HTML":
Common Body Class module permet aux utilisateurs d’ajouter des classes à n’importe quelle page via une interface . L’interface dispose d’options pour sélectionner plusieurs rôles d’utilisateur ainsi que des pages sur lesquelles la classe peut être rendue.
La réponse semble dépendre du contexte. Voici ce que j'ai trouvé par essais et erreurs:
Si votre hook_preprocess_html () est dans un module , utilisez $ vars ['classes_array'] [].
S'il s'agit d'un theme , utilisez $ vars ['attributs_array'] ['classe'] [].
J'ai appliqué cette technique sur un site que quelqu'un d'autre a construit. Cela n'a pas fonctionné au début, mais a ensuite creusé plus profondément et a constaté que la variable $ classes n'était pas sortie dans le fichier tpl. Donc, si ça ne marche pas, vérifiez ça.