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

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

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

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

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

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

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, но, похоже, мне действительно нужны некоторые конкретные примеры и ОБЪЯСНЕНИЯ того, почему что-то работает, так что я, надеюсь, в следующий раз смогу логически понять это.

Можете поделиться снимком экрана kint($variables)?

Razeem Ahmad 02.05.2018 11:29

Не знаете, как сделать kint (переменная $)? В php файла MYTHEME.theme? Где тогда его распечатать?

Rillieux 02.05.2018 21:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
2 579
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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...
}

Спасибо, РА. Это работает, когда элемент словаря отображается в виде узла, но я думаю, мне следует более четко объяснить свои потребности. У меня есть страница с типом контента «Экспонат», и каждый узел выставки имеет одно или несколько полей ссылки на словарь. Итак, я пытаюсь предварительно обработать это поле, чтобы оно извлекало отдельные термины словаря и раскрашивало их в соответствии с полем topic_colour. Здесь вы можете увидеть разницу. На данный момент я жестко запрограммировал цвета, но «основное» значение отображается только тогда, когда открыта страница «Анализ», а не на странице типа контента. i.imgur.com/MKwvH0T.png

Rillieux 02.05.2018 20:42

Кроме того, термин «Анализ» имеет цветовой тег «первичный», но другие теги не показывают и не должны показывать ничего рядом с ними, кроме пола, который должен отображать тег это «опасность». Как вы можете видеть выше, «первичный» отображается рядом с каждым тегом на странице «Анализ» (вы видите результаты для тизера типа контента, помеченного как «Анализ», тогда как на узле этой страницы контента вообще ничего не отображается.

Rillieux 02.05.2018 21:03

Добавляем ответ сейчас. Мой последний код в поле - файл 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 %}

Rillieux 18.05.2018 08:36
Ответ принят как подходящий

Добавляем ответ сейчас. Мой последний код в поле - файл 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, и ни один из моих «тегов» не имеет более одного родителя.

Другие вопросы по теме