Come aggiungere classi al tag BODY in modo dinamico in base al percorso / profondità della pagina?


22

Come aggiungere classi al tag body in modo dinamico come nell'esempio seguente?

-Casa
-Città -      
Melbourne       <body class="melbourne">
--- Parchi a tema       <body class="melbourne theme_parks">
--- Ristoranti       - <body class="melbourne restaurants">
New York       <body class="new_york">
--- Parchi a tema       <body class="new_york theme_parks">
--- Ristoranti       <body class="new_york restaurants">
-Contattaci       <body class="contact_us">

Principiante Drupal qui e senza programmazione di fondo. Pertanto, sarei molto grato se potessi essere il più dettagliato possibile quando condividi una soluzione.

Risposte:


37

Per spiegare la risposta di Nikhil Mohan, puoi implementare template_preprocess_html()il file template.php del tuo tema. Leggi la documentazione su Override Themable Output per comprendere le basi di ciò che sta succedendo qui.

All'interno di questa funzione, hai accesso alla variabile $vars['classes_array'], che contiene un elenco di classi che verranno applicate al <body>tag HTML sulla pagina.

Sfortunatamente, le informazioni sulla posizione della pagina corrente nel menu non sono immediatamente disponibili. Potresti usare menu_get_item()e poi menu_get_ancestors()ottenere queste informazioni, ma questa è una grande potenza di elaborazione per qualcosa che probabilmente possiamo ottenere con un approccio simpiler.

Supponendo che tu stia utilizzando il modulo pathauto per creare automaticamente percorsi semantici per le tue pagine di contenuti in base al percorso del menu (ovvero, la tua pagina dei parchi a tema di Melbourne avrebbe il percorso 'melbourne / theme_parks') puoi utilizzare il percorso della pagina per creare le classi che stai cercando:

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);
  } 
}

Questo è tutto. Drupal ora esaminerà l'alias del percorso della pagina corrente e aggiungerà una classe al <body>tag per ogni blocco dell'alias del percorso.


1
Se i percorsi non funzionano, anche l'analisi di menu_get_active_breadcrumb può essere un'opzione. È probabilmente nella staticcache a quel punto, quindi quasi nessun sovraccarico.
mpdonadio

3
Grazie a tutti, in particolare @sheena_d per la spiegazione e il codice! Ho dovuto fare un po 'di ricerca su come farlo funzionare su Omega Theme e sono riuscito a farlo funzionare: D Questa è la linea per farlo funzionare su Omega Theme: $vars['attributes_array']['class'][] = drupal_clean_css_identifier($alias);
kyooriouskoala



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.