Иногда возникает задача: в 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 вернёт именно «прямого родителя». В таком случае нужно решать, откуда брать заголовок — от ближайшего контейнера или искать выше по иерархии до ноды. Для базовых сценариев приведённого кода достаточно.
