Иногда возникает задача: в Twig-шаблоне параграфа (paragraph.html.twig
) нужно отобразить заголовок материала (ноды), к которому этот параграф прикреплён.
Нам не нужно передавать что то дополнительно в шаблон, эти данные могут быть получены из самой сущности paragrpaph, которая передаётся в шаблон в виде объекта.
Подробнее о том как это работает
Объект paragraph
является полноценной сущностью (\Drupal\paragraphs\Entity\Paragraph
). У этой сущности есть метод getParentEntity()
, возвращающий родительскую сущность — обычно это node
.
Twig умеет обращаться к публичным методам и свойствам объектов, поэтому в шаблоне мы можем писать просто paragraph.parentEntity
, чтобы получить доступ к родительскому объекту.
Пример кода с выводом заголовка node
В paragraph.html.twig
добавим проверку и вывод:
1 2 3 |
{% if paragraph.parentEntity and paragraph.parentEntity.entityTypeId == 'node' %} <h2>{{ paragraph.parentEntity.label }}</h2> {% endif %} |
Что здесь происходит
paragraph.parentEntity
— возвращает родительскую сущность.paragraph.parentEntity.entityTypeId
— проверяем, что родитель действительно нода (а не, например, другой параграф).paragraph.parentEntity.label
— заголовок родительской ноды (аналогичноnode.label
).
Вложенные параграфы
Если параграф вложен в другой параграф, то paragraph.parentEntity
вернёт именно «прямого родителя». В таком случае нужно решать, откуда брать заголовок — от ближайшего контейнера или искать выше по иерархии до ноды. Для базовых сценариев приведённого кода достаточно.