Transmiterea variabilelor între șabloane

Acest ghid vă va explica cum se transmit variabilele între șabloane în Latte folosind diverse tag-uri precum {include}, {import}, {embed}, {layout}, {sandbox} și altele. Veți afla, de asemenea, cum să lucrați cu variabile în tag-ul {block} și {define}, și la ce servește tag-ul {parameters}.

Tipuri de variabile

Variabilele în Latte le putem împărți în trei categorii în funcție de cum și unde sunt definite:

Variabilele de intrare sunt cele care sunt transmise șablonului din exterior, de exemplu dintr-un script PHP sau folosind un tag precum {include}.

$latte->render('template.latte', ['userName' => 'Jan', 'userAge' => 30]);

Variabilele ambientale sunt variabilele existente în locul unui anumit tag. Acestea includ toate variabilele de intrare și alte variabile create folosind tag-uri precum {var}, {default} sau în cadrul unei bucle {foreach}.

{foreach $users as $user}
	{include 'userBox.latte', user: $user}
{/foreach}

Variabilele explicite sunt cele care sunt specificate direct în interiorul tag-ului și sunt trimise șablonului țintă.

{include 'userBox.latte', name: $user->name, age: $user->age}

{block}

Tag-ul {block} se utilizează pentru a defini blocuri de cod reutilizabile, care pot fi personalizate sau extinse în șabloanele moștenite. Variabilele ambientale definite înainte de bloc sunt disponibile în interiorul blocului, dar orice modificări ale variabilelor se reflectă doar în cadrul acelui bloc.

{var $foo = 'original'}
{block example}
	{var $foo = 'modificat'}
{/block}

{$foo}    // afișează: original

{define}

Tag-ul {define} servește la crearea blocurilor care se randează abia după ce sunt apelate folosind {include}. Variabilele disponibile în interiorul acestor blocuri depind dacă sunt specificați parametri în definiție. Dacă da, au acces doar la acești parametri. Dacă nu, au acces la toate variabilele de intrare ale șablonului în care sunt definite blocurile.

{define hello}
	{* are acces la toate variabilele de intrare ale șablonului *}
{/define}

{define hello $name}
	{* are acces doar la parametrul $name *}
{/define}

{parameters}

Tag-ul {parameters} servește la declararea explicită a variabilelor de intrare așteptate la începutul șablonului. În acest mod se pot documenta ușor variabilele așteptate și tipurile lor de date. De asemenea, este posibil să se definească valori implicite.

{parameters int $age, string $name = 'necunoscut'}
<p>Vârstă: {$age}, Nume: {$name}</p>

{include file}

Tag-ul {include file} servește la inserarea unui șablon întreg. Acestui șablon i se transmit atât variabilele de intrare ale șablonului în care este utilizat tag-ul, cât și variabilele definite explicit în el. Șablonul țintă poate însă limita domeniul folosind {parameters}.

{include 'profile.latte', userId: $user->id}

{include block}

Când inserați un bloc definit în același șablon, i se transmit toate variabilele ambientale și cele definite explicit:

{define blockName}
	<p>Nume: {$name}, Vârstă: {$age}</p>
{/define}

{var $name = 'Jan', $age = 30}
{include blockName}

În acest exemplu, variabilele $name și $age se transmit blocului blockName. În același mod se comportă și {include parent}.

La inserarea unui bloc dintr-un alt șablon, sunt transmise doar variabilele de intrare și cele definite explicit. Variabilele ambientale nu sunt disponibile automat.

{include blockInOtherTemplate, name: $name, age: $age}

{layout} sau {extends}

Aceste tag-uri definesc layout-ul, căruia i se transmit variabilele de intrare ale șablonului copil și, în plus, variabilele create în cod înainte de blocuri:

{layout 'layout.latte'}
{var $seo = 'index, follow'}

Șablonul layout.latte:

<head>
	<meta name="robots" content="{$seo}">
</head>

{embed}

Tag-ul {embed} este similar cu tag-ul {include}, dar permite inserarea blocurilor în șablon. Spre deosebire de {include}, se transmit doar variabilele declarate explicit:

{embed 'menu.latte', items: $menuItems}
{/embed}

În acest exemplu, șablonul menu.latte are acces doar la variabila $items.

În schimb, în blocurile din interiorul {embed} este acces la toate variabilele ambientale:

{var $name = 'Jan'}
{embed 'menu.latte', items: $menuItems}
	{block foo}
		{$name}
	{/block}
{/embed}

{import}

Tag-ul {import} se utilizează pentru încărcarea blocurilor din alte șabloane. Se transmit atât variabilele de intrare, cât și cele declarate explicit în blocurile importate.

{import 'buttons.latte'}

{sandbox}

Tag-ul {sandbox} izolează șablonul pentru procesare sigură. Variabilele sunt transmise exclusiv explicit.

{sandbox 'secure.latte', data: $secureData}
versiune: 3.0