Transmiterea variabilelor între șabloane

Acest ghid explică modul în care sunt transmise variabilele între șabloane în Latte, folosind diverse etichete, cum ar fi {include}, {import}, {embed}, {layout}, {sandbox} și altele. De asemenea, veți învăța cum să lucrați cu variabilele din etichetele {block} și {define} și care este scopul etichetei {parameters}.

Tipuri de variabile

Variabilele din Latte pot fi împărțite în trei categorii în funcție de modul și locul în care sunt definite:

Variabilele de intrare sunt cele care sunt trecute în șablon din exterior, de exemplu, dintr-un script PHP sau folosind un tag ca {include}.

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

Variabilele înconjurătoare sunt variabilele care există în locația unei anumite etichete. Acestea includ toate variabilele de intrare și alte variabile create cu ajutorul unor etichete precum {var}, {default}, sau în cadrul unei bucle {foreach}.

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

Variabilele explicite sunt cele specificate direct în cadrul unei etichete și trimise la șablonul țintă.

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

{block}

Eticheta {block} este utilizată pentru a defini blocuri de cod reutilizabile care pot fi personalizate sau extinse în șabloanele moștenite. Variabilele înconjurătoare definite înainte de bloc sunt disponibile în interiorul blocului, dar orice modificare a variabilelor se reflectă numai în cadrul blocului respectiv.

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

{$foo}    // outputs: original

{define}

Eticheta {define} este utilizată pentru a crea blocuri care sunt redate numai atunci când sunt apelate folosind {include}. Variabilele disponibile în interiorul acestor blocuri depind de specificarea sau nu a unor parametri în definiție. În cazul în care sunt specificați parametrii, numai acei parametri sunt accesibili. În caz contrar, sunt accesibile toate variabilele de intrare din șablonul în care sunt definite blocurile.

{define hello}
	{* has access to all input variables of the template *}
{/define}

{define hello $name}
	{* has access only to the $name parameter *}
{/define}

{parameters}

Eticheta {parameters} este utilizată pentru a declara în mod explicit variabilele de intrare așteptate la începutul șablonului. În acest fel, puteți documenta cu ușurință variabilele așteptate și tipurile de date ale acestora. De asemenea, este posibil să se definească valori implicite.

{parameters int $age, string $name = 'unknown'}
<p>Age: {$age}, Name: {$name}</p>

{include file}

Eticheta {include file} este utilizată pentru a insera un șablon întreg. Acestui șablon i se transmit atât variabilele de intrare ale șablonului în care se utilizează eticheta, cât și variabilele definite în mod explicit. Cu toate acestea, șablonul țintă poate limita domeniul de aplicare folosind {parameters}.

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

{include block}

Atunci când se inserează un bloc definit în același șablon, toate variabilele înconjurătoare și cele definite în mod explicit îi sunt transmise:

{define blockName}
	<p>Name: {$name}, Age: {$age}</p>
{/define}

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

În acest exemplu, variabilele $name și $age sunt transmise blocului blockName. Același comportament se aplică și la {include parent}.

Atunci când se inserează un bloc dintr-un alt șablon, se transmit numai variabilele de intrare și variabilele definite explicit. Variabilele înconjurătoare nu sunt disponibile în mod automat.

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

{layout} sau {extends}

Aceste etichete definesc un aspect la care sunt transmise variabilele de intrare ale șablonului copil și variabilele create în cod înainte de blocuri:

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

Șablon layout.latte:

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

{embed}

Eticheta {embed} este similară cu {include}, dar permite încorporarea de blocuri în șablon. Spre deosebire de {include}, sunt transmise doar variabilele declarate explicit:

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

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

În schimb, blocurile din interiorul {embed} au acces la toate variabilele din jur:

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

{import}

Eticheta {import} este utilizată pentru a încărca blocuri din alte șabloane. Atât variabilele de intrare, cât și cele declarate explicit sunt transmise blocurilor importate.

{import 'buttons.latte'}

{sandbox}

Eticheta {sandbox} izolează șablonul pentru o procesare sigură. Variabilele sunt transmise exclusiv în mod explicit.

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