Как я могу изменить или предварительно обработать тег <body>
, чтобы добавить тело класса? Я не хочу создавать целое html.tpl.php только для добавления класса.
Добавление класса в "body"
Ответ 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":
Ответ 5
Ответ зависит от контекста. Вот что я нашел через пробную ошибку:
Если ваш hook_preprocess_html() находится в модуле, используйте $vars ['classes_array'] [].
Если это в теме, используйте $vars ['attributes_array'] ['class'] [].
Ответ 6
Я применил эту технику на сайте, который кто-то создал. Сначала это не сработало, но затем углубилось и обнаружило, что переменная $classes не выводится в файле tpl. Поэтому, если он не работает, проверьте это.
Ответ 7
Модуль Common Body Class предоставляет пользователям возможность добавлять классы на любую страницу через интерфейс. Интерфейс имеет опции для выбора нескольких пользовательских ролей, а также страниц, на которых может отображаться класс.