使用优雅的子主题在Drupal 8中构建一个站点。遇到一个令人费解的主题问题 - 根据该节点上的分类术语向html.html.twig添加body类。
Themers使用它来自定义页面显示,在我的例子中使用它来定义我网站的几个部分,以便我可以改变颜色和格式。
我尝试了一些我在google上看到的预处理函数但没有结果。
还有其他人遇到并解决了这个问题吗?
答案 0 :(得分:1)
使用它来获取节点的所有字段并检查您需要的任何内容:
\Drupal::service('current_route_match')->getParameter('node')->toArray();
在.theme文件中,您可以使用html预处理钩子:
function your_theme_preprocess_html(&$variables) {
$body_classes = [];
$nodeFields = \Drupal::service('current_route_match')->getParameter('node')->toArray();
// if something, then set $body_classes to something.
$variables['attributes']['class'] += $body_classes;
}
然后在你的html twig模板中将属性添加到body元素:
<body{{ attributes }}>
希望这有帮助。
答案 1 :(得分:1)
回答Frank Drebin我得到了一个PHP致命错误(不支持的操作数类型)和&#34; + =&#34;操作数。如果要将节点ID和节点类型添加到body类,可以使用此代码,例如:
// Add the node ID and node type to the body class
$body_classes = [];
$nodeFields = \Drupal::service('current_route_match')->getParameter('node')->toArray();
if (is_array($nodeFields) && count($nodeFields) > 0) {
if (isset($nodeFields['nid'])) {
$body_classes[] = 'node-' . $nodeFields['nid'][0]['value'];
}
if (isset($nodeFields['type'])) {
$body_classes[] = $nodeFields['type'][0]['target_id'];
}
}
$variables['attributes']['class'] = $body_classes;