web-dev-qa-db-fra.com

Comment ajouter dynamiquement des classes à la balise BODY en fonction du chemin / de la profondeur de la page?

Comment ajouter dynamiquement des classes à la balise body comme cet exemple ci-dessous?

-Accueil
-Villes
- Melbourne <body class="melbourne">
---Parc d'attractions <body class="melbourne theme_parks">
---Restaurants <body class="melbourne restaurants">
--New York <body class="new_york">
---Parc d'attractions <body class="new_york theme_parks">
---Restaurants <body class="new_york restaurants">
-Nous contacter <body class="contact_us">

Débutant Drupal ici et sans fond de programmation. Par conséquent, j'apprécierais beaucoup que vous puissiez être aussi détaillé que possible lors du partage d'une solution.

21
kyooriouskoala

Pour expliquer la réponse de Nikhil Mohan, vous pouvez implémenter template_preprocess_html() dans le fichier template.php de votre thème. Lisez la documentation sur Overriding Themable Output pour comprendre les bases de ce qui se passe ici.

Dans cette fonction, vous avez accès à la variable $vars['classes_array'], Qui contient une liste de classes qui seront appliquées à la balise HTML <body> Sur la page.

Malheureusement, les informations sur l'emplacement de la page actuelle dans le menu ne sont pas immédiatement disponibles. Vous pouvez utiliser menu_get_item() puis menu_get_ancestors() pour obtenir ces informations, mais cela représente beaucoup de puissance de traitement pour quelque chose que nous peut probablement arriver avec une approche simpiler.

En supposant que vous utilisez le module pathauto pour créer automatiquement des chemins sémantiques pour vos pages de contenu en fonction du chemin de menu (c'est-à-dire que votre page Melbourne Theme Parks aurait le chemin 'melbourne/theme_parks'), vous pouvez utiliser le chemin de la page pour créer les classes que vous sont en train de chercher:

function THEMENAME_preprocess_html(&$vars) {
  $path = drupal_get_path_alias();
  $aliases = explode('/', $path);

  foreach($aliases as $alias) {
    $vars['classes_array'][] = drupal_clean_css_identifier($alias);
  } 
}

C'est ça. Drupal va maintenant regarder l'alias de chemin de la page en cours et ajouter une classe à la balise <body> Pour chaque morceau de l'alias de chemin.

37
sheena_d

Vous pouvez utiliser template_preprocess_html , qui pré-traite les variables pour html.tpl.php

Voir aussi html.tpl.php

Implémentation du thème par défaut pour afficher la structure html de base d'une seule page Drupal

1
niksmac

Voici le module pour ajouter des classes sur la balise body en fonction du rôle ou des pages.

Classe de corps commun

Créé le Body Classes Drupal module pour aider à cela. N'hésitez pas à créer des problèmes pour ajouter plus de points d'intégration de classe de corps.

0
RobLoach