D8 Как получить значение настраиваемого поля словарного слова для файла field--entity-reference.html.twig?

Моя цель состоит в том, чтобы раскрасить термины словаря на основе поля field_topic_color, которое я добавил в словарь. Есть и другие словари, в которых нет этого поля. Итак, мне нужно проверить и посмотреть, существует ли он для определенного термина, а затем получить значение, чтобы я мог создавать свои классы и получать кнопки правильного цвета.

С kint я вижу значение, но не могу понять, как перейти к нему в ветке или с помощью предварительной обработки. Все вопросы, которые я нашел, касаются словесных терминов в узлах, а не в самих терминах.

Вот мой снимок экрана: введите здесь описание изображения

Я пытаюсь перейти к «основному» (ключевое слово, указывающее моей подтеме Bootstrap, какой цвет использовать) в поле field_topic_color.

Что именно я должен написать в функции предварительной обработки?

function MYTHEME_preprocess_field__entity_reference($variable) {
  //I need code to return a string like this (I think) where "primary"
  //is the value from my custom field in the term.
  $color = ????? (primary)
  $mytag = 'class="btn- . $color . ">TERM-NAME...TERM_URL...
}

Я могу очистить php самостоятельно, не беспокоясь об этом в приведенном выше примере. Мне просто нужно получить значение для моего поля...

Я проверил шпаргалки здесь: https://wizzlern.nl/sites/wizzlern.nl/files/artikel/drupal-content-entity-8.0.pdf но, похоже, мне действительно нужны конкретные примеры и ОБЪЯСНЕНИЯ того, почему что-то работает, так что, надеюсь, я смогу начать чтобы логически понять это в следующий раз.


person Rillieux    schedule 30.04.2018    source источник
comment
Можете ли вы поделиться снимком экрана kint($variables)?   -  person Razeem Ahmad    schedule 02.05.2018
comment
Не знаете, как сделать kint($variable)? В файле MYTHEME.theme php? Где тогда распечатать?   -  person Rillieux    schedule 02.05.2018


Ответы (2)


Вы можете получить доступ к таким переменным $term->field_topic_colour->value Поскольку они находятся в массиве, они должны быть доступны так $term->field_topic_colour[0]->value

function MYTHEME_preprocess_field__entity_reference($variable) {
  $term = \Drupal::routeMatch()->getParameter('taxonomy_term');
  $color = NULL;
  if(isset($term->field_topic_colour[0]->value) {
    $color = $term->field_topic_colour[0]->value;
  }
  $mytag = 'class="btn- . $color . ">TERM-NAME...TERM_URL...
}
person Razeem Ahmad    schedule 02.05.2018
comment
Спасибо, РА. Это работает при отображении элемента словаря в виде узла, но я думаю, что мне следует более четко объяснить свои потребности. У меня есть страница, показывающая тип контента Exhibit, и каждый узел выставки имеет одно или несколько полей ссылки на объект для словаря. Итак, я пытаюсь предварительно обработать это поле, чтобы оно извлекало отдельные словарные термины и окрашивало их в соответствии с полем theme_color. Здесь вы можете увидеть разницу. На данный момент у меня жестко закодированы цвета, но значение «основное» отображается только тогда, когда открыта страница «Анализ», а не на странице типа контента. i.imgur.com/MKwvH0T.png - person Rillieux; 02.05.2018
comment
Кроме того, у термина «Анализ» есть первичный тег цвета, но другие теги не имеют и не должны отображать рядом с собой ничего, кроме пола, который должен показывать его тег опасности. Как вы можете видеть выше, основной отображается рядом с каждым тегом на странице «Анализ» (вы видите результаты для тизера типа контента, помеченного тегом «Анализ», тогда как на узле этой страницы контента вообще ничего не отображается. - person Rillieux; 02.05.2018
comment
Добавление ответа сейчас. Мой окончательный код в файле field--entity-reference.html.twig: {% for item in items %} {% set mylabel %} {{ item.content }} {% endset %} {% set myclass %} {{ item.content['#options'].entity.vid.0.value['target_id'] }} {% endset %} {% set myclass = myclass|replace({'_':'-'}) %} <div{{ item.attributes.addClass('taxonomy--item') }}> <a class="btn-small btn-primary tag-{{ myclass|trim }}" href="{{ item.content['#url'] }}" role="button">{{ mylabel|striptags }}</a> </div> {% endfor %} - person Rillieux; 18.05.2018

Добавление ответа сейчас. Мой окончательный код в файле field--entity-reference.html.twig:

{% for item in items %}
  {% set mylabel %}
    {{ item.content }}
  {% endset %}
  {% set myclass %}
    {{ item.content['#options'].entity.vid.0.value['target_id'] }}
  {% endset %}
  {% set myclass = myclass|replace({'_':'-'}) %}
    <div{{ item.attributes.addClass('taxonomy--item') }}>
      <a class="btn-small btn-primary tag-{{ myclass|trim }}" href="{{ item.content['#url'] }}" role="button">{{ mylabel|striptags }}</a>
    </div>
{% endfor %}

ЗДЕСЬ код, необходимый в узле для доступа к родительскому словарю терминов таксономии в узле. (То есть отдельные теги на узле типа контента).

item.content['#options'].entity.vid.0.value['target_id']

ПРИМЕЧАНИЕ. Это на Drupal 8.5.3, и ни один из моих "тегов" не имеет более одного родителя.

person Rillieux    schedule 18.05.2018