Як динамічно додавати класи до тегу BODY на основі шляху / глибини сторінки?


22

Як динамічно додавати класи до тегу body, наприклад, у цьому прикладі нижче?

-Home
-Cities      
--Melbourne       <body class="melbourne">
--- Парки       <body class="melbourne theme_parks">
--- Ресторани       <body class="melbourne restaurants">
--Новой Йорк       <body class="new_york">
--- тематичні парки       <body class="new_york theme_parks">
--- Ресторани       <body class="new_york restaurants">
-контактними нас       <body class="contact_us">

Drupal новачок тут і без фону програмування. Тому я дуже вдячний, якби ви могли бути максимально деталізованими під час обміну рішенням.

Відповіді:


37

Щоб пояснити відповідь Нікіла Мохана, ви можете впровадити template_preprocess_html()всередині файлу template.php вашої теми. Прочитайте документацію щодо переосмислення тематичного виходу, щоб зрозуміти основи того, що тут відбувається.

У межах цієї функції у вас є доступ до змінної $vars['classes_array'], яка містить список класів, які будуть застосовані до <body>тегу HTML на сторінці.

На жаль, інформація про місцезнаходження поточної сторінки в меню одразу недоступна. Ви можете використати menu_get_item()і потім, menu_get_ancestors()щоб отримати цю інформацію, але це велика потужність обробки для того, до чого ми, мабуть, можемо дістатись із підходом simpiler.

Якщо припустити, що ви використовуєте модуль pathauto для автоматичного створення семантичних шляхів для сторінок вмісту на основі шляху до меню (тобто, на вашій сторінці в тематичних парках Мельбурна буде міститися шлях 'melbourne / theme_parks'), ви можете використовувати шлях до сторінки для створення класів, які ви шукаю:

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

Це воно. Тепер Drupal перегляне псевдонім шляху поточної сторінки та додасть клас до <body>тегу для кожного фрагмента псевдоніма шляху.


1
Якщо шляхи не працюють, параметр menu_get_active_breadcrumb також може бути варіантом. Це, ймовірно, в staticкеш-пам'яті в цей момент, тому майже немає накладних витрат.
mpdonadio

3
Дякую всім, особливо @sheena_d за пояснення, а також код! Довелося трохи пошукати, як змусити його працювати над «Темою Omega», і вдалося змусити її працювати: D Це лінійка, щоб змусити її працювати над «Темою Омеги»: $vars['attributes_array']['class'][] = drupal_clean_css_identifier($alias);
kyooriouskoala

1

Ви можете скористатись template_preprocess_htmlякими переробляти змінні для html.tpl.php

Дивіться також html.tpl.php

Реалізація теми за замовчуванням для відображення основної структури HTML на одній сторінці Drupal



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.