Drupal 8 - 根据分类学术语或其他术语添加身体类

时间:2016-06-06 15:54:40

标签: drupal themes preprocessor drupal-8

使用优雅的子主题在Drupal 8中构建一个站点。遇到一个令人费解的主题问题 - 根据该节点上的分类术语向html.html.twig添加body类。

Themers使用它来自定义页面显示,在我的例子中使用它来定义我网站的几个部分,以便我可以改变颜色和格式。

我尝试了一些我在google上看到的预处理函数但没有结果。

还有其他人遇到并解决了这个问题吗?

2 个答案:

答案 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;