Változók átadása sablonok között
Ez az útmutató elmagyarázza, hogyan adódnak át a változók a sablonok között a Latte-ban különböző tagek, mint
például {include}
, {import}
, {embed}
, {layout}
, {sandbox}
és
mások segítségével. Megtudhatod azt is, hogyan dolgozz a változókkal a {block}
és {define}
tagekben, és mire szolgál a {parameters}
tag.
Változók típusai
A Latte változóit három kategóriába sorolhatjuk attól függően, hogyan és hol vannak definiálva:
Bemeneti változók azok, amelyeket kívülről adnak át a sablonnak, például egy PHP szkriptből vagy egy tag, mint
például {include}
segítségével.
$latte->render('template.latte', ['userName' => 'Jan', 'userAge' => 30]);
Környezeti változók azok a változók, amelyek egy adott tag helyén léteznek. Tartalmazzák az összes bemeneti
változót és más, tagek, mint például {var}
, {default}
vagy a {foreach}
ciklus
keretében létrehozott változókat.
{foreach $users as $user}
{include 'userBox.latte', user: $user}
{/foreach}
Explicit változók azok, amelyeket közvetlenül a tagben specifikálnak, és a cél sablonnak küldenek.
{include 'userBox.latte', name: $user->name, age: $user->age}
{block}
A {block}
tag újra felhasználható kódblokkok definiálására szolgál, amelyeket az öröklődő sablonokban
testre lehet szabni vagy bővíteni. A blokk előtt definiált környezeti változók elérhetők a blokkon belül, de a
változók bármilyen módosítása csak a blokkon belül érvényesül.
{var $foo = 'eredeti'}
{block example}
{var $foo = 'megváltozott'}
{/block}
{$foo} // kiírja: eredeti
{define}
A {define}
tag olyan blokkok létrehozására szolgál, amelyek csak akkor renderelődnek, amikor a
{include}
segítségével meghívják őket. Az ezekben a blokkokban elérhető változók attól függnek, hogy a
definícióban meg vannak-e adva paraméterek. Ha igen, csak ezekhez a paraméterekhez férnek hozzá. Ha nem, akkor hozzáférnek
a sablon összes bemeneti változójához, amelyben a blokkok definiálva vannak.
{define hello}
{* hozzáfér a sablon összes bemeneti változójához *}
{/define}
{define hello $name}
{* csak a $name paraméterhez fér hozzá *}
{/define}
{parameters}
A {parameters}
tag a várt bemeneti változók explicit deklarálására szolgál a sablon elején. Ezzel a
módszerrel könnyen dokumentálhatók a várt változók és azok adattípusai. Lehetőség van alapértelmezett értékek
definiálására is.
{parameters int $age, string $name = 'ismeretlen'}
<p>Kor: {$age}, Név: {$name}</p>
{include file}
A {include file}
tag egy teljes sablon beillesztésére szolgál. Ennek a sablonnak átadódnak mind a sablon
bemeneti változói, amelyben a tagot használják, mind a benne expliciten definiált változók. A cél sablon azonban
korlátozhatja a hatókört a {parameters}
segítségével.
{include 'profile.latte', userId: $user->id}
{include block}
Amikor egy ugyanabban a sablonban definiált blokkot illesztesz be, átadódnak neki az összes környezeti és expliciten definiált változó:
{define blockName}
<p>Név: {$name}, Kor: {$age}</p>
{/define}
{var $name = 'Jan', $age = 30}
{include blockName}
Ebben a példában a $name
és $age
változók átadódnak a blockName
blokknak.
Ugyanígy viselkedik a {include parent}
is.
Amikor egy másik sablonból származó blokkot illesztesz be, csak a bemeneti és az expliciten definiált változók adódnak át. A környezeti változók nem érhetők el automatikusan.
{include blockInOtherTemplate, name: $name, age: $age}
{layout}
vagy {extends}
Ezek a tagek definiálják a layoutot, amelynek átadódnak az alárendelt sablon bemeneti változói, valamint a kódblokkok előtt létrehozott változók:
{layout 'layout.latte'}
{var $seo = 'index, follow'}
A layout.latte
sablon:
<head>
<meta name="robots" content="{$seo}">
</head>
{embed}
A {embed}
tag hasonló a {include}
taghez, de lehetővé teszi blokkok beágyazását a sablonba.
Ellentétben a {include}
-dal, csak az expliciten deklarált változók adódnak át:
{embed 'menu.latte', items: $menuItems}
{/embed}
Ebben a példában a menu.latte
sablon csak az $items
változóhoz fér hozzá.
Ezzel szemben a {embed}
belüli blokkokban hozzáférés van az összes környezeti változóhoz:
{var $name = 'Jan'}
{embed 'menu.latte', items: $menuItems}
{block foo}
{$nam}
{/block}
{/embed}
{import}
A {import}
tag más sablonokból származó blokkok betöltésére szolgál. Mind a bemeneti, mind az expliciten
deklarált változók átadódnak az importált blokkoknak.
{import 'buttons.latte'}
{sandbox}
A {sandbox}
tag izolálja a sablont a biztonságos feldolgozáshoz. A változók kizárólag expliciten
adódnak át.
{sandbox 'secure.latte', data: $secureData}