Визуализация поля узла внутри page.html.twig

12

У меня есть поле изображения для моего типа контента (field_hero_image).

Я не хочу, чтобы он отображался в файле node.html.twig. Тем не менее, я хочу сделать это в файле page.html.twig. В частности, я хочу сделать это рядом с заголовком страницы.

Какой код я бы использовал в своем файле page.html.twig для доступа к полям уровня узла и их рендеринга?

(Существует аналогичный вопрос, но я не смог использовать предоставленный там ответ для решения моей проблемы.)

Это для Drupal 8 Темы.

kraftybasterd
источник
2
@kiamlaluno - почему ты редактировал мой вопрос ?? Наличие «Drupal 8» в заголовке «И в вопросе» делает это очевидным для потенциальных поставщиков услуг, и делает его намного легче найти в Google, учитывая распространенность контента Drupal 6 и 7; Четкое разъяснение вопросов и ответов по Drupal 8 полезно для сообщества в целом, ищущего конкретные ответы D8. Интересно, какова была ваша причина для изменения.
kraftybasterd
Пожалуйста, не дублируйте теги в заголовках вопросов; теги видны везде, где виден вопрос, поэтому нет необходимости использовать теги также в заголовке вопроса.
kiamlaluno
2
Очевидно, я новичок здесь ... но помогают ли метатеги (в данном случае, "8") с результатами поиска? Я чувствую, что заголовки контента, содержащие Drupal 8 или Drupal 7, потенциально могут помочь людям в поиске ответов через Google ... но это просто идея.
kraftybasterd

Ответы:

26

Проведя немного больше исследований, я смог найти достаточно частей в других вопросах и на 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 для моей конкретной проблемы, но это выходит за рамки этого вопроса / ответа.

kraftybasterd
источник
Я был настроен скептически, создавая впечатление, что в D7 такие вещи всегда должны быть, например, в функции предварительной обработки. Тем не менее, пример file_url()в документации ( drupal.org/docs/8/theming/twig/functions-in-twig-templates ) делает именно это, так что проголосовал.
Грэм C
Как вы проходите через определенный тип контента и выводите значения его полей внутри page.html.twig?
Наурасс Деруичи
2

Есть три удобных метода для работы с этим, каждый из которых экономит ваше время, копаясь в сложных массивах рендеринга.

  1. Используя Display Suite (с подмодулем ds_extras), вы можете назначить региону героя блок («область блока»), который представляет собой другой режим отображения (т.е. только тот, который содержит изображение героя). Таким образом, вы получаете два разных режима отображения одновременно. Обратите внимание, что некоторые ловушки препроцессора могут не сработать, как вы можете ожидать, если вы сделаете это.

  2. Модуль twig_tweak значительно упрощает такие задачи и может давать более простые операторы веток для значений полей. Посмотрите на шпаргалку для некоторых распространенных применений: {{ drupal_field('field_image', 'node', 1) }}подпись функции:drupalField($field_name, $entity_type, $id = NULL, $view_mode = 'default', $langcode = NULL)

  3. Модуль twig_field_value делает более простые операторы веток . За README.txt:<img src={{ file_url(content.field_image|field_target_entity.uri.value) }} alt={{ content.field_image|field_raw('alt') }} />

Если бы я знал это раньше, это сэкономило бы мне много времени!

HongPong
источник
1
Это правильный ответ. По моему опыту, {{ node.field_some_name.value }}не делает поле. Он не вызывает полную систему тем (функция предварительной обработки, шаблон и т. Д.). OTOH, если вы используете twig_tweakмодуль, вы можете получить полностью визуализированное поле с{{ node.field_some_name|view }}
kentr