Передача змінних між шаблонами
Цей посібник пояснює, як передавати змінні між шаблонами в 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}
ізолює шаблон для безпечної обробки. Змінні
передаються виключно явно.