Jak dynamicznie dodawać klasy do znacznika BODY na podstawie ścieżki / głębokości strony?


22

Jak dynamicznie dodawać klasy do znacznika body, tak jak w tym przykładzie poniżej?

-Home
-Cities      
--Melbourne       <body class="melbourne">
--- parki tematyczne       <body class="melbourne theme_parks">
--- restauracje       <body class="melbourne restaurants">
--new York       <body class="new_york">
--- parki tematyczne       <body class="new_york theme_parks">
--- restauracje       <body class="new_york restaurants">
-Kontakt z nami       <body class="contact_us">

Drupal nowicjusz tutaj i bez programowania. Dlatego byłbym bardzo wdzięczny, gdybyś mógł podać jak najwięcej szczegółów podczas udostępniania rozwiązania.

Odpowiedzi:


37

Aby objaśnić odpowiedź Nikhila Mohana, możesz zaimplementować go template_preprocess_html()w pliku template.php kompozycji. Przeczytaj dokumentację na temat przesłonięcia wyjścia tematycznego, aby zrozumieć podstawy tego, co się tutaj dzieje.

W ramach tej funkcji masz dostęp do zmiennej $vars['classes_array'], która zawiera listę klas, które zostaną zastosowane do <body>znacznika HTML na stronie.

Niestety informacje o lokalizacji bieżącej strony w menu nie są natychmiast dostępne. Możesz użyć, menu_get_item()a następnie menu_get_ancestors()uzyskać te informacje, ale jest to duża moc obliczeniowa dla czegoś, co prawdopodobnie możemy uzyskać dzięki podejściu opartemu na uproszczeniu.

Zakładając, że używasz modułu pathauto do automatycznego tworzenia ścieżek semantycznych dla swoich stron z treściami na podstawie ścieżki menu (tj. Strona parków rozrywki w Melbourne miałaby ścieżkę „melbourne / theme_parks”), możesz użyć ścieżki strony do stworzenia klas, które szuka:

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

to jest to! Drupal spojrzy teraz na alias ścieżki bieżącej strony i doda klasę do <body>tagu dla każdego fragmentu aliasu ścieżki.


1
Jeśli ścieżki nie działają, wówczas opcją jest także parsowanie menu_get_active_breadcrumb . Prawdopodobnie w statictym momencie jest w pamięci podręcznej, więc prawie nie ma narzutu.
mpdonadio

3
Dziękuję wszystkim, szczególnie @sheena_d za wyjaśnienie, a także kod! Musiałem trochę poszukać, jak sprawić, by działał na Omega Theme i udało się go uruchomić: D To jest linia, która sprawi, że będzie działać na Omega Theme: $vars['attributes_array']['class'][] = drupal_clean_css_identifier($alias);
kyooriouskoala



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.