在“body”中添加一个类

时间:2011-10-09 01:23:18

标签: drupal drupal-7 drupal-theming

如何修改或预处理<body>标记以添加类主体?我不想创建一个完整的html.tpl.php来添加一个类。

10 个答案:

答案 0 :(得分:51)

在主题的template.php文件中,使用preprocess_html挂钩:

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

一旦你实现了钩子,请记得清除缓存,否则Drupal就不会把它拿起来。

答案 1 :(得分:8)

The documentation for the html.tpl.php template$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';
}

由于这是核心定义的模板和流程函数,任何行为良好的主题都应该重用相同的变量。

答案 2 :(得分:3)

我必须在同一个钩子中使用不同的数组键才能使它工作:

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

答案 3 :(得分:2)

Context模块允许您将类添加到body标记中。

如果您需要在特定条件下添加课程,这可能很有用。

您可以在“主题HTML”的反应下找到此选项:

Theme HTML option in Context UI

答案 4 :(得分:1)

答案似乎取决于背景。这是我通过反复试验找到的:

如果您的hook_preprocess_html()位于模块中,请使用$ vars ['classes_array'] []。

如果是主题,请使用$ vars ['attributes_array'] ['class'] []。

答案 5 :(得分:1)

Common Body Class模块为用户提供了通过接口向任何页面添加类的功能。 界面具有选择多个用户角色的选项以及可以渲染类的页面。

Example

答案 6 :(得分:0)

我在其他人建立的网站上应用了此技术。它最初没有工作,但后来挖得更深,发现$ classes变量没有在tpl文件中输出。所以,如果它不起作用,请检查。

答案 7 :(得分:0)

对于Drupal 7,安装http://drupal.org/project/body_class。它将帮助您为body标签中的每个节点添加单独的类

答案 8 :(得分:0)

您可以选中“ https://www.drupal.org/project/page_specific_class”以将类添加到任何页面的正文标签中

答案 9 :(得分:0)

这是一种基于 URL 添加类的简单方法,Drupal 9。 无需启用模块。

/**
 * Implements hook_preprocess_html().
 */
function THEME_NAME_preprocess_html(&$variables) {
  // Get the current path
  $current_path = \Drupal::service('path.current')->getPath();
  $internal_path = \Drupal::service('path_alias.manager')->getAliasByPath($current_path);

  // Assign it to body class 
  $variables['attributes']['class'][] = str_replace("/", "", $internal_path);
}

参考:http://www.thirstysix.com/how-can-i-add-body-class-based-path-page-specific-class-drupal-9