Особенности использования Twig функции evaluate в Grav CMS

 

Grav CMSTwigразработка

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

Например, в настройках темы оформления может быть определён формат заголовков страниц для динамического вывода внутри HTML тега title:

template:
  header:
    title: "grav.page.header.title ~ ' | ' ~ site.title"

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

<title>{{ evaluate(theme.template.header.title)|e('html') }}</title>

В результате его выполнения в качестве заголовка страницы будет установлен текст, состоящий из заголовка текущей страницы и названия сайта, заданного в файле site.yaml, разделённых с использованием вертикальной черты, например: Практика использования Grav CMS | Всё о Grav CMS.

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

Во-первых, при задании строки кода следует учитывать, что работа функции аналогична выполнению следующего кода Twig: {{ some_twig_code }}, где some_twig_code – содержание передаваемой для выполнения строки. Это накладывает ограничения на использование разделителей и конструкций кода в содержании строки.

Во-вторых, функция evaluate предоставляет доступ к переменным, инициированным при выполнении Twig::init(), но, что важно, не предоставляет прямого доступа к объекту текущей страницы page, так как его инициализация происходит позже. Поэтому для доступа к объекту page следует использовать контейнер grav, как это показано в первом примере кода, демонстрирующем задание значения настройки темы оформления template.header.title.

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