Předávání proměnných napříč šablonami
Tento průvodce objasňuje, jak se v Latte předávají proměnné mezi šablonami pomocí různých tagů jako
{include}
, {import}
, {embed}
, {layout}
, {sandbox}
a dalších.
Dozvíte se také, jak pracovat s proměnnými v tagu {block}
a {define}
, a k čemu slouží značka
{parameters}
.
Typy proměnných
V Latte rozlišujeme tři kategorie proměnných podle jejich definice a dostupnosti:
Vstupní proměnné jsou předávány do šablony zvenčí, typicky z PHP skriptu nebo pomocí tagů jako
{include}
.
Okolní proměnné jsou proměnné existující v místě určité značky. Zahrnují všechny vstupní proměnné a
další proměnné vytvořené pomocí tagů jako {var}
, {default}
nebo v rámci smyčky
{foreach}
.
Explicitní proměnné jsou ty, které jsou přímo specifikovány uvnitř tagu a jsou odeslány do cílové šablony.
{block}
Tag {block}
se používá k definování opakovaně použitelných bloků kódu, které lze v dědičných
šablonách přizpůsobit nebo rozšířit. Okolní proměnné definované před blokem jsou dostupné uvnitř bloku, ale
jakékoli změny proměnných se projeví jen v rámci toho bloku.
{define}
Tag {define}
vytváří bloky, které se renderují až po jejich explicitním zavolání pomocí
{include}
. Dostupnost proměnných uvnitř těchto bloků závisí na přítomnosti parametrů v definici.
S parametry mají bloky přístup pouze k těmto parametrům. Bez parametrů mají přístup ke všem vstupním proměnným
šablony, ve které jsou definovány.
{parameters}
Tag {parameters}
slouží k explicitní deklaraci očekávaných vstupních proměnných na začátku šablony.
Tímto způsobem lze efektivně dokumentovat očekávané proměnné a jejich datové typy. Umožňuje také definovat výchozí
hodnoty.
{include file}
Tag {include file}
vkládá celou šablonu. Do vkládané šablony se předávají vstupní proměnné šablony,
ve které je značka použita, spolu s explicitně definovanými proměnnými. Cílová šablona může omezit rozsah
přijímaných proměnných pomocí {parameters}
.
{include block}
Při vkládání bloku definovaného ve stejné šabloně se do něj předávají všechny okolní a explicitně definované proměnné:
V tomto příkladu jsou proměnné $name
a $age
předány do bloku blockName
. Stejně
se chová i {include parent}
.
Při vkládání bloku z jiné šablony se předávají pouze vstupní proměnné a explicitně definované proměnné. Okolní proměnné nejsou automaticky dostupné.
{layout}
nebo {extends}
Tyto tagy definují layout, do kterého se předávají vstupní proměnné podřízené šablony a proměnné vytvořené v kódu před bloky:
Šablona layout.latte
:
{embed}
Tag {embed}
je podobný tagu {include}
, ale umožňuje vkládání bloků do šablony. Na rozdíl od
{include}
se předávají pouze explicitně deklarované proměnné:
V tomto příkladu má šablona menu.latte
přístup pouze k proměnné $items
.
Naopak v blocích uvnitř {embed}
je přístup ke všem okolním proměnným:
{import}
Tag {import}
se používá pro načítání bloků z jiných šablon. Do importovaných bloků se předávají
jak vstupní, tak explicitně deklarované proměnné.
{sandbox}
Tag {sandbox}
izoluje šablonu pro bezpečné zpracování. Proměnné jsou předávány výhradně explicitně,
což zvyšuje kontrolu nad daty vstupujícími do izolovaného prostředí.
Tento mechanismus umožňuje přesnou kontrolu nad tím, jaká data jsou dostupná v izolované šabloně, což je užitečné pro zpracování potenciálně nebezpečného obsahu.