在Drupal 8中获取节点ID的分类术语

时间:2018-04-27 16:13:16

标签: drupal drupal-8

我试图添加一个预处理挂钩,将基于分类名称的类添加到我的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不是存在的东西,可能吗?)都会非常感激。

1 个答案:

答案 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());
    }
  }
}