Как я могу напечатать название словаря вместо указанного термина в шаблоне узла?
Допустим, у меня есть статья типа контента с полем "таксономия".
Словарь - это "фрукты".
Термины "яблоко", "апельсин", "бананы"
Статья принадлежит "оранжевому".
Я могу легко напечатать в своем шаблоне ветки термин статьи:
{{ content.field_taxo_fruit }}
Результат "оранжевый".
Но я не нахожу простого способа напечатать словарный запас: "фрукты".
В другом проекте я использовал views field
и использовал "результат перезаписи". Но здесь я использую шаблон ветки, такой как node--article--teaser.html.twig
2 answers
Вы можете установить подмодуль Devel Kint, а затем распечатать в своем шаблоне {{ kint() }}
, чтобы получить красиво напечатанный дамп всех доступных переменных.
К сожалению, я не смог найти там словарную метку/название. Только метка поля:
{{ content.field_taxo_fruit['#title'] }}
Ответ @4k4 ниже выводит только имя машины словаря. Но не ярлык/имя. Но я, наконец, получил название словаря в функции предварительной обработки в MYTHEME.theme
, откуда я отправил его в Веточка:
function MYTHEME_preprocess_node__article(&$variables) {
$node = $variables['node'];
$vid = array_values($node->field_taxo_fruit->getSettings()['handler_settings']['target_bundles'])[0];
$vocabulary = \Drupal::entityTypeManager()->getStorage('taxonomy_vocabulary')->load($vid);
$variables['taxo_fruit_vocab'] = $vocabulary->label();
}
И в node--article.html.twig
тогда это:
{% if taxo_fruit_vocab %}
<div class="taxo-fruit-vocab">
Vocab: {{ taxo_fruit_vocab }}
</div>
{% endif %}
Имя словарной машины - это идентификатор пакета термина, который вы можете получить через объект узла:
{{ node.field_taxo.entity.bundle }}
Чтобы загрузить метку словаря:
{{ node.field_taxo.entity.vid.entity.label }}
Это работает только тогда, когда поле содержит содержимое. Для пустого поля вам придется углубиться в определение поля, которое вы получаете от одного и того же объекта поля, и проверить, ограничено ли поле одним целевым пакетом.