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}