Változók átadása sablonokon keresztül
Ez az útmutató elmagyarázza, hogy a változókat hogyan adjuk át a sablonok között a Latte-ban különböző címkék
segítségével, mint például {include}
, {import}
, {embed}
, {layout}
,
{sandbox}
és mások. Megtudhatja továbbá, hogyan dolgozzon a {block}
és a {define}
címkékben lévő változókkal, valamint a {parameters}
címke célját.
A változók típusai
A változókat a Latte-ban három kategóriába sorolhatjuk aszerint, hogy hogyan és hol vannak definiálva:
Bemeneti változók azok, amelyeket kívülről adunk át a sablonhoz, például egy PHP szkriptből vagy egy olyan tag
segítségével, mint a {include}
.
$latte->render('template.latte', ['userName' => 'Jan', 'userAge' => 30]);
A környező változók egy adott tag helyén létező változók. Ezek közé tartozik minden bemeneti változó és
az olyan címkékkel létrehozott egyéb változók, mint a {var}
, {default}
, vagy egy cikluson belül a
{foreach}
.
{foreach $users as $user}
{include 'userBox.latte', user: $user}
{/foreach}
A **explicit változók azok a változók, amelyeket közvetlenül egy címkén belül határoznak meg és küldenek el a célsablonnak.
{include 'userBox.latte', name: $user->name, age: $user->age}
{block}
A {block}
címke újrafelhasználható kódblokkok definiálására szolgál, amelyek testreszabhatók vagy
bővíthetők az örökölt sablonokban. A blokk előtt definiált környező változók a blokkon belül is elérhetőek, de a
változók bármilyen módosítása csak az adott blokkban jelenik meg.
{var $foo = 'original'}
{block example}
{var $foo = 'modified'}
{/block}
{$foo} // outputs: original
{define}
A {define}
címke olyan blokkok létrehozására szolgál, amelyek csak akkor kerülnek megjelenítésre, ha a
{include}
használatával hívják meg ő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 paraméterek vannak megadva, csak ezek a paraméterek érhetők el. Ha nem,
akkor annak a sablonnak az összes bemeneti változója elérhető, ahol a blokkok definiálva vannak.
{define hello}
{* has access to all input variables of the template *}
{/define}
{define hello $name}
{* has access only to the $name parameter *}
{/define}
{parameters}
A {parameters}
címkét arra használjuk, hogy a sablon elején kifejezetten deklaráljuk az elvárt bemeneti
változókat. Így könnyen dokumentálhatók a várható változók és adattípusaik. Lehetőség van alapértelmezett értékek
definiálására is.
{parameters int $age, string $name = 'unknown'}
<p>Age: {$age}, Name: {$name}</p>
{include file}
A {include file}
címke egy teljes sablon beillesztésére szolgál. Ennek a sablonnak átadjuk mind a sablon
bemeneti változóit, ahol a taget használjuk, mind az explicit módon definiált változókat. A célsablon azonban a
{parameters}
segítségével korlátozhatja a hatókörét.
{include 'profile.latte', userId: $user->id}
{include block}
Egy ugyanabban a sablonban definiált blokk beillesztésekor az összes környező és explicit módon definiált változót átadjuk neki:
{define blockName}
<p>Name: {$name}, Age: {$age}</p>
{/define}
{var $name = 'Jan', $age = 30}
{include blockName}
Ebben a példában a $name
és a $age
változókat a blockName
blokknak adjuk át.
Ugyanez a viselkedés vonatkozik a {include parent}
.
Egy másik sablonból származó blokk beillesztésekor csak a bemeneti változók és az explicit módon definiált változók kerülnek átadásra. A környező változók nem állnak automatikusan rendelkezésre.
{include blockInOtherTemplate, name: $name, age: $age}
{layout}
vagy {extends}
Ezek a címkék egy olyan elrendezést határoznak meg, amelyhez a gyermek sablon bemeneti változói és a blokkok előtt a kódban létrehozott változók kerülnek átadásra:
{layout 'layout.latte'}
{var $seo = 'index, follow'}
Sablon layout.latte
:
<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. A
{include}
-tól eltérően csak explicit módon deklarált változókat ad át:
{embed 'menu.latte', items: $menuItems}
{/embed}
Ebben a példában a menu.latte
sablon csak a $items
változóhoz fér hozzá.
Ezzel szemben a {embed}
belsejében lévő blokkok hozzáférnek az összes környező változóhoz:
{var $name = 'Jan'}
{embed 'menu.latte', items: $menuItems}
{block foo}
{$name}
{/block}
{/embed}
{import}
A {import}
címke más sablonokból származó blokkok betöltésére szolgál. Az importált blokkoknak mind a
bemeneti, mind az explicit módon deklarált változókat átadja.
{import 'buttons.latte'}
{sandbox}
A {sandbox}
címke elkülöníti a sablont a biztonságos feldolgozás érdekében. A változókat kizárólag
explicit módon adjuk át.
{sandbox 'secure.latte', data: $secureData}