Подтвердить что ты не робот

Добавление класса в "body"

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Документация для шаблона html.tpl.php документирует переменные $classes как String классов, которые могут использоваться для контекстного стиля через 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';
}

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

Ответ 3

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

function THEME_preprocess_html(&$vars) {
  $vars['attributes_array']['class'][] = 'foo2';
}

Ответ 4

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

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

Эти параметры вы найдете под реакцией "Тема HTML":

Theme HTML option in Context UI

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

Модуль Common Body Class предоставляет пользователям возможность добавлять классы на любую страницу через интерфейс. Интерфейс имеет опции для выбора нескольких пользовательских ролей, а также страниц, на которых может отображаться класс.

Example