Добавление класса в «тело» - PullRequest
33 голосов
/ 09 октября 2011

Как я могу изменить или предварительно обработать тег <body>, чтобы добавить тело класса?Я не хочу создавать целый html.tpl.php просто для добавления класса.

Ответы [ 7 ]

51 голосов
/ 09 октября 2011

В файле вашей темы template.php используйте хук preprocess_html:

function mytheme_preprocess_html(&$vars) {
  $vars['classes_array'][] = 'new-class';
}

Не забудьте очистить кеши, как только вы реализовали хук, иначе Drupal не будет его поднимать.

8 голосов
/ 31 октября 2011

Документация для шаблона html.tpl.php документирует переменные $classes как Строка классов, которые могут использоваться для контекстного стиля с помощью CSS. . Если вы посмотрите на код шаблона, эта переменная используется в атрибутах класса создаваемого элемента body:

<body class="<?php print $classes; ?>" <?php print $attributes;?>>

Переменные $classes фактически уже установлены template_process() для любого файла шаблона и сборки из содержимого переменной $classes_array.

Итак, чтобы добавить класс в тело вашей страницы, вы должны добавить этот класс к значению $classes_array из реализации вашей темы (или модуля) hook_preprocess_html():

function THEME_preprocess_html(&$variables) {
  $variables['classes_array'][] = 'new-class';
}

Поскольку это шаблон, определяемый core , и функция процесса, любая тема с хорошим поведением должна повторно использовать те же переменные.

3 голосов
/ 30 апреля 2013

Мне пришлось использовать разные ключи массива в одном хуке, чтобы он работал:

function THEME_preprocess_html(&$vars) {
  $vars['attributes_array']['class'][] = 'foo2';
}
2 голосов
/ 23 сентября 2014

Модуль Context позволяет также добавить класс в тег body.

Это может быть полезно, если вам нужно добавить класс при определенных условиях.

Эта опция доступна под реакцией "Тема HTML":

Theme HTML option in Context UI

1 голос
/ 25 июня 2013

Ответ зависит от контекста.Вот что я нашел методом проб и ошибок:

Если ваш hook_preprocess_html () находится в модуле , используйте $ vars ['classes_array'] [].

Если это тема , используйте $ vars ['attribute_array'] ['class'] [].

0 голосов
/ 16 мая 2013

Я применил эту технику на сайте, который кто-то создал. Сначала это не сработало, но потом углубилось и обнаружило, что переменная $ classes не выводится в файл tpl. Так что, если это не работает, проверьте это.

...