我试图添加一个预处理挂钩,将基于分类名称的类添加到我的drupal安装的body css中。我已经设法根据搜索和试错来获取有关节点的所有信息,但是我想将它带到下一步并根据特定节点获取所有分类术语标识。
我当前的预处理代码如下:
function custom_preprocess_html(&$variables) {
// 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;
}
它工作正常并下拉有关节点的信息。基于答案here,似乎我应该做的就是添加以下行来获取分类术语:$taxonomyTerms = $nodefields->get('field_yourfield')->referencedEntities();
但是当我这样做时,Drupal会抛出错误。我会自由地承认我是Drupal 8的新手,所以任何有关我出错的地方的建议(field_yourfield不是存在的东西,可能吗?)都会非常感激。
答案 0 :(得分:0)
如果您正在尝试获取引用的术语名称并将其添加为正文类,那么您的方法似乎有点偏离。
这就是我使用的:
function CUSTOM_preprocess_html(&$variables) {
// Entity reference field name.
$field_name = 'field_tags';
// Get the node object from the visited page.
// If the page is not a node detail page, it'll return NULL.
$node = \Drupal::request()->attributes->get('node');
// Let's make sure the node has the field.
if ($node && $node->hasField($field_name)) {
$referenced_entities = $node->get($field_name)->referencedEntities();
foreach ($referenced_entities as $term) {
$variables['attributes']['class'][] = \Drupal\Component\Utility\Html::cleanCssIdentifier($term->getName());
}
}
}