Передача переменных между шаблонами
Это руководство объясняет, как передавать переменные между
шаблонами в Latte с помощью различных тегов, таких как {include}
,
{import}
, {embed}
, {layout}
, {sandbox}
, и других. Вы также
узнаете, как работать с переменными в тегах {block}
и {define}
, а
также о назначении тега {parameters}
.
Типы переменных
Переменные в Latte можно разделить на три категории в зависимости от того, как и где они определяются:
Входные переменные – это те, которые передаются в шаблон извне,
например, из PHP-скрипта или с помощью тега {include}
.
Окружающие переменные – это переменные, существующие в месте
расположения определенного тега. К ним относятся все входные
переменные и другие переменные, созданные с помощью таких тегов, как
{var}
, {default}
, или в цикле {foreach}
.
Явные переменные – это переменные, непосредственно указанные в теге и отправленные в целевой шаблон.
{block}
Тег {block}
используется для определения многократно
используемых блоков кода, которые могут быть настроены или расширены в
наследуемых шаблонах. Окружающие переменные, определенные до блока,
доступны внутри блока, но любые изменения переменных отражаются
только в этом блоке.
{define}
Тег {define}
используется для создания блоков, которые
отображаются только при вызове с помощью {include}
. Переменные,
доступные внутри этих блоков, зависят от того, указаны ли в определении
параметры. Если параметры указаны, то доступны только эти параметры.
Если нет, то доступны все входные переменные шаблона, в котором
определены блоки.
{parameters}
Тег {parameters}
используется для явного объявления ожидаемых
входных переменных в начале шаблона. Таким образом, вы можете легко
документировать ожидаемые переменные и их типы данных. Также можно
определить значения по умолчанию.
{include file}
Тег {include file}
используется для вставки целого шаблона. Этому
шаблону передаются как входные переменные шаблона, в котором
используется тег, так и явно определенные переменные. Однако целевой
шаблон может ограничить область применения с помощью {parameters}
.
{include block}
При вставке блока, определенного в том же шаблоне, ему передаются все окружающие и явно определенные переменные:
В этом примере переменные $name
и $age
передаются блоку
blockName
. Аналогичное поведение применимо и к блоку
{include parent}
.
При вставке блока из другого шаблона передаются только входные переменные и явно определенные переменные. Окружающие переменные автоматически не доступны.
{layout}
или {extends}
Эти теги определяют макет, в который передаются входные переменные дочернего шаблона и переменные, созданные в коде перед блоками:
Шаблон layout.latte
:
{embed}
Тег {embed}
аналогичен тегу {include}
, но позволяет встраивать
блоки в шаблон. В отличие от {include}
, передаются только явно
объявленные переменные:
В данном примере шаблон menu.latte
имеет доступ только к
переменной $items
.
И наоборот, блоки внутри {embed}
имеют доступ ко всем окружающим
переменным:
{import}
Тег {import}
используется для загрузки блоков из других шаблонов.
Импортируемым блокам передаются как входные, так и явно объявленные
переменные.
{sandbox}
Тег {sandbox}
изолирует шаблон для безопасной обработки.
Переменные передаются исключительно в явном виде.