У меня есть поле изображения для моего типа контента (field_hero_image).
Я не хочу, чтобы он отображался в файле node.html.twig. Тем не менее, я хочу сделать это в файле page.html.twig. В частности, я хочу сделать это рядом с заголовком страницы.
Какой код я бы использовал в своем файле page.html.twig для доступа к полям уровня узла и их рендеринга?
(Существует аналогичный вопрос, но я не смог использовать предоставленный там ответ для решения моей проблемы.)
Это для Drupal 8 Темы.
Ответы:
Проведя немного больше исследований, я смог найти достаточно частей в других вопросах и на drupal.org, чтобы достичь того, что я хотел сделать.
Для этого ответа предварительная обработка не требуется, поэтому нет необходимости добавлять код в файл mytheme.theme.
Все эти переменные уже доступны в page.html.twig по умолчанию.
Чтобы отобразить значение поля по умолчанию внутри page.html.twig, вы обычно используете переменную Twig, как в
{{ node.field_some_name.value }}
.Если у вас есть поле изображения и вы хотите отобразить URL-адрес изображения, хранящегося в этом поле внутри шаблона page.html.twig, вы должны использовать его
{{ file_url(node.field_some_image.entity.fileuri) }}
.Наконец, если вы хотите отобразить заголовок узла внутри шаблона page.html.twig, вы должны использовать
{{ node.label }}
.Я также узнал, как использовать некоторые условные выражения Twig для моей конкретной проблемы, но это выходит за рамки этого вопроса / ответа.
источник
file_url()
в документации ( drupal.org/docs/8/theming/twig/functions-in-twig-templates ) делает именно это, так что проголосовал.page.html.twig
?Есть три удобных метода для работы с этим, каждый из которых экономит ваше время, копаясь в сложных массивах рендеринга.
Используя Display Suite (с подмодулем ds_extras), вы можете назначить региону героя блок («область блока»), который представляет собой другой режим отображения (т.е. только тот, который содержит изображение героя). Таким образом, вы получаете два разных режима отображения одновременно. Обратите внимание, что некоторые ловушки препроцессора могут не сработать, как вы можете ожидать, если вы сделаете это.
Модуль twig_tweak значительно упрощает такие задачи и может давать более простые операторы веток для значений полей. Посмотрите на шпаргалку для некоторых распространенных применений:
{{ drupal_field('field_image', 'node', 1) }}
подпись функции:drupalField($field_name, $entity_type, $id = NULL, $view_mode = 'default', $langcode = NULL)
Модуль twig_field_value делает более простые операторы веток . За README.txt:
<img src={{ file_url(content.field_image|field_target_entity.uri.value) }} alt={{ content.field_image|field_raw('alt') }} />
Если бы я знал это раньше, это сэкономило бы мне много времени!
источник
{{ node.field_some_name.value }}
не делает поле. Он не вызывает полную систему тем (функция предварительной обработки, шаблон и т. Д.). OTOH, если вы используетеtwig_tweak
модуль, вы можете получить полностью визуализированное поле с{{ node.field_some_name|view }}