Наследование значения поля страницы в Grav CMS

 

 Grav CMSTwigсниппет

Использование наследования значений полей страниц может облегчить работу при создании разделов веб-сайта, избавляя редактора от заполнения вручную повторяющихся полей на вложенных страницах: достаточно создать и заполнить значения полей корневой страницы, которые затем будут использоваться на всех подстраницах раздела.

Предлагаемый метод позволяет наследовать значение заданного поля для страницы любого уровня вложенности. Причём, если заданное поле будет найдено в заголовке текущей страницы, то будет возвращено его значение, иначе будет произведён поиск вверх по предкам текущей страницы с возвращением первого найденного значения.

Для наследования значения поля используется метод Page::inheritedField:

{% set inherited_field = page.inheritedField('extra_field') %}
{{ dump(inherited_field) }}

При использовании метода Page::inheritedField необходимо учитывать, что возвращаемое им значение является массивом. Поэтому, если вам требуется вывести полученное значение в шаблоне оформления Twig, то используя его напрямую, вы получите ошибку Twig_Error_Runtime: An exception has been thrown during the rendering of a template ("Array to string conversion"). Таким образом, при выводе значения наследованного поля, следует учитывать структуру возвращённого массива, именно поэтому в первом примере я использовал функцию Twig dump.

Наиболее простым и распространённым случаем является наследование строкового значения поля, поэтому для его вывода в шаблоне оформления можно использовать следующий код:

{% set inherited_field = page.inheritedField('extra_field') %}
{{ inherited_field|first }}

Использование рассмотренного метода наследования значений полей страниц-предков в Grav CMS помогает при работе с разделами веб-сайта, содержащими большое количество вложенных страниц, при этом не требует привязки к чётко заданной структуре и определённому уровню вложенности страниц-наследников.