向“body”添加一个类
Posted
技术标签:
【中文标题】向“body”添加一个类【英文标题】:Adding a class to "body" 【发布时间】:2011-12-03 18:58:02 【问题描述】:如何修改或预处理<body>
标签以添加类主体?我不想创建一个完整的 html.tpl.php 只是为了添加一个类。
【问题讨论】:
【参考方案1】:这是一种基于 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
【讨论】:
【参考方案2】:您可以勾选“https://www.drupal.org/project/page_specific_class”为任何页面的body标签添加class
【讨论】:
有时最好写下你的答案(从任何地方)而不是外部链接。【参考方案3】:对于 Drupal 7 安装 http://drupal.org/project/body_class。它将帮助您为 body 标签中的每个节点添加单独的类
【讨论】:
【参考方案4】:Common Body Class 模块提供用户通过一个接口向任何页面添加类。 该界面具有选择多个用户角色以及可以呈现类的页面的选项。
【讨论】:
【参考方案5】:Context 模块还允许您向 body 标记添加一个类。
如果您需要在特定条件下添加类,这会很有用。
您可以在反应“主题 HTML”下找到此选项:
【讨论】:
【参考方案6】:答案似乎取决于上下文。这是我通过反复试验发现的:
如果您的 hook_preprocess_html() 位于 模块 中,请使用 $vars['classes_array'][]。
如果它在 主题 中,请使用 $vars['attributes_array']['class'][]。
【讨论】:
不完全 -attributes_array
是由 Omega 主题专门定义的。对于“正常”主题,它将是 classes_array
【参考方案7】:
我在别人建立的网站上应用了这种技术。起初它不起作用,但后来深入挖掘,发现 $classes 变量没有在 tpl 文件中输出。因此,如果它不起作用,请检查。
【讨论】:
【参考方案8】:我必须在同一个钩子中使用不同的数组键才能使其工作:
function THEME_preprocess_html(&$vars)
$vars['attributes_array']['class'][] = 'foo2';
【讨论】:
【参考方案9】:The documentation for the html.tpl.php template 将$classes
变量记录为类字符串,可用于通过 CSS 设置上下文样式。。如果你看一下模板的代码,这个变量用于生成的 body 元素的类属性中:
<body class="<?php print $classes; ?>" <?php print $attributes;?>>
$classes
变量实际上已经由template_process()
为任何模板文件设置,并根据$classes_array
变量的内容构建。
因此,要将类添加到页面主体,您应该将此类添加到主题(或模块)的 hook_preprocess_html()
实现中的 $classes_array
值:
function THEME_preprocess_html(&$variables)
$variables['classes_array'][] = 'new-class';
由于这是核心定义的模板和流程函数,任何表现良好的主题都应该重复使用相同的变量。
【讨论】:
【参考方案10】:在您主题的 template.php
文件中使用 preprocess_html
挂钩:
function mytheme_preprocess_html(&$vars)
$vars['classes_array'][] = 'new-class';
记得在实现钩子后清除缓存,否则 Drupal 将无法拾取它。
【讨论】:
它是如何知道添加到body的?html.tpl.php
中只有一个元素添加了任何类,即<body>
元素;上面的预处理函数是针对那个文件的,所以你添加的任何类都只会被添加到<body>
元素中。
顺便说一句,如果您还没有安装Devel module 并在整个代码中的任何变量上使用dpm
函数;它将呈现放置在通常消息区域中的类和数组的良好表示......这是调试的绝对必要条件。您可以在上面的函数中使用它,例如:dpm($vars);
它会将数组打印到屏幕上,以便您可以检查它
我已经尝试过了(清除缓存、检查拼写等),但没有成功。是否存在受其他模块影响的情况?我正在使用上下文和欧米茄主题,顺便说一句。
@nikan 现在可能有点晚了,但是对于 Omega,您想实现 mytheme_alpha_preprocess_html
并将类添加到 $vars['attributes_array']['class']
数组中以上是关于向“body”添加一个类的主要内容,如果未能解决你的问题,请参考以下文章
html HTML / JQUERY:将窗口宽度特定类设置为body标签。用于向旧版浏览器添加媒体查询支持或添加宽度指定
html HTML / JQUERY:将窗口宽度特定类设置为body标签。用于向旧版浏览器添加媒体查询支持或添加宽度指定
html HTML / JQUERY:将窗口宽度特定类设置为body标签。用于向旧版浏览器添加媒体查询支持或添加宽度指定
html HTML / JQUERY:将窗口宽度特定类设置为body标签。用于向旧版浏览器添加媒体查询支持或添加宽度指定
html HTML / JQUERY:将窗口宽度特定类设置为body标签。用于向旧版浏览器添加媒体查询支持或添加宽度指定