Получение условий таксономии для идентификатора узла в Drupal 8 - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь добавить ловушку препроцессора, чтобы добавить классы, основанные на имени таксономии, в css тела моей установки drupal. Мне удалось получить всю информацию об узле, основываясь на поиске и пробах и ошибках, но я бы хотел перейти к следующему шагу и получить все термины таксономии на основе конкретного идентификатора узла.

Мой текущий код препроцесса следующий:

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;
}

Работает нормально и выводит информацию об узле. Исходя из ответа здесь кажется, что все, что мне нужно сделать, это добавить следующую строку, чтобы получить термины таксономии: $taxonomyTerms = $nodefields->get('field_yourfield')->referencedEntities();, но когда я это делаю, Drupal выдает ошибку. Я свободно признаю, что я новичок в Drupal 8, поэтому любые предложения о том, где я ошибаюсь (не является ли field_yourfield чем-то, что существует, может быть?), Будут с благодарностью.

1 Ответ

0 голосов
/ 27 апреля 2018

Если вы пытаетесь получить имена терминов, на которые ссылаются, и добавить их в качестве классов тела, ваш подход выглядит немного не так.

Вот что я использую:

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());
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...