Система управления контентом 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
– содержание передаваемой для выполнения строки. Это накладывает ограничения на использование разделителей и конструкций кода в содержании строки.
Во-вторых, функция evaluate
предоставляет доступ к переменным, инициированным при выполнении Twig::init()
, но, что важно, не предоставляет прямого доступа к объекту текущей страницы page
, так как его инициализация происходит позже. Поэтому для доступа к объекту page
следует использовать контейнер grav
, как это показано в первом примере кода, демонстрирующем задание значения настройки темы оформления template.header.title
.
Знание этих особенностей работы функции evaluate
поможет избежать возможных проблем в освоении разработки шаблонов и тем оформления для Grav CMS, сэкономить время на поиск ошибок, связанных с использованием кода, передаваемого для выполнения функции evaluate
, а главное, открыть новые возможности использования настроек Grav CMS для определения динамических блоков в шаблонах тем оформления.