Моя цель - раскрасить термины словаря на основе field_topic_colour, который я добавил в словарь. Есть другие словари, в которых нет этого поля. Итак, мне нужно проверить, существует ли оно для определенного термина, а затем получить значение, чтобы я мог создавать свои классы и получать кнопки с правильным цветом.
С помощью kint я могу видеть значение, но не могу понять, как перейти к нему в 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 (переменная $)? В php файла MYTHEME.theme? Где тогда его распечатать?





Вы можете получить доступ к таким переменным, как этот $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
Кроме того, термин «Анализ» имеет цветовой тег «первичный», но другие теги не показывают и не должны показывать ничего рядом с ними, кроме пола, который должен отображать тег это «опасность». Как вы можете видеть выше, «первичный» отображается рядом с каждым тегом на странице «Анализ» (вы видите результаты для тизера типа контента, помеченного как «Анализ», тогда как на узле этой страницы контента вообще ничего не отображается.
Добавляем ответ сейчас. Мой последний код в поле - файл 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 %}
Добавляем ответ сейчас. Мой последний код в поле - файл 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, и ни один из моих «тегов» не имеет более одного родителя.
Можете поделиться снимком экрана
kint($variables)?