Posredovanje spremenljivk med predlogami
V tem priročniku je pojasnjeno, kako se spremenljivke posredujejo med predlogami v Latte z uporabo različnih oznak, kot so
{include}
, {import}
, {embed}
, {layout}
, {sandbox}
in druge.
Naučili se boste tudi, kako delati s spremenljivkami v oznakah {block}
in {define}
ter kakšen je
namen oznake {parameters}
.
Vrste spremenljivk
Spremenljivke v Latte lahko razdelimo v tri kategorije glede na to, kako in kje so opredeljene:
Vhodne spremenljivke so tiste, ki se v predlogo posredujejo od zunaj, na primer iz skripte PHP ali z uporabo oznake,
kot je {include}
.
$latte->render('template.latte', ['userName' => 'Jan', 'userAge' => 30]);
Okoliške spremenljivke so spremenljivke, ki obstajajo na lokaciji določene oznake. Sem spadajo vse vhodne
spremenljivke in druge spremenljivke, ustvarjene z uporabo oznak, kot so {var}
, {default}
, ali znotraj
zanke {foreach}
.
{foreach $users as $user}
{include 'userBox.latte', user: $user}
{/foreach}
Izrecne spremenljivke so tiste, ki so neposredno določene v oznaki in poslane ciljni predlogi.
{include 'userBox.latte', name: $user->name, age: $user->age}
{block}
Oznaka {block}
se uporablja za opredelitev blokov kode, ki jih je mogoče ponovno uporabiti in jih prilagoditi ali
razširiti v podedovanih predlogah. Okoliške spremenljivke, opredeljene pred blokom, so na voljo znotraj bloka, vendar se vse
spremembe spremenljivk odražajo le znotraj tega bloka.
{var $foo = 'original'}
{block example}
{var $foo = 'modified'}
{/block}
{$foo} // outputs: original
{define}
Oznaka {define}
se uporablja za ustvarjanje blokov, ki se prikažejo le, če jih pokličete z uporabo
{include}
. Spremenljivke, ki so na voljo znotraj teh blokov, so odvisne od tega, ali so v definiciji določeni
parametri. Če so parametri navedeni, so dostopni samo ti parametri. Če ne, so dostopne vse vhodne spremenljivke predloge,
v kateri so bloki definirani.
{define hello}
{* has access to all input variables of the template *}
{/define}
{define hello $name}
{* has access only to the $name parameter *}
{/define}
{parameters}
Oznaka {parameters}
se uporablja za izrecno prijavo pričakovanih vhodnih spremenljivk na začetku predloge. Tako
lahko enostavno dokumentirate pričakovane spremenljivke in njihove podatkovne tipe. Prav tako je mogoče opredeliti privzete
vrednosti.
{parameters int $age, string $name = 'unknown'}
<p>Age: {$age}, Name: {$name}</p>
{include file}
Oznaka {include file}
se uporablja za vstavljanje celotne predloge. Tej predlogi se posredujejo tako vhodne
spremenljivke predloge, v kateri se uporablja oznaka, kot tudi izrecno določene spremenljivke. Vendar lahko ciljna predloga
omeji področje uporabe z uporabo {parameters}
.
{include 'profile.latte', userId: $user->id}
{include block}
Pri vstavljanju bloka, definiranega v isti predlogi, se mu posredujejo vse okoliške in izrecno definirane spremenljivke:
{define blockName}
<p>Name: {$name}, Age: {$age}</p>
{/define}
{var $name = 'Jan', $age = 30}
{include blockName}
V tem primeru se spremenljivki $name
in $age
posredujeta bloku blockName
. Enako se
obnaša tudi {include parent}
.
Pri vstavljanju bloka iz druge predloge se posredujejo samo vhodne spremenljivke in izrecno določene spremenljivke. Okoliške spremenljivke niso samodejno na voljo.
{include blockInOtherTemplate, name: $name, age: $age}
{layout}
ali {extends}
Te oznake določajo postavitev, v katero se prenesejo vhodne spremenljivke podrejene predloge in spremenljivke, ustvarjene v kodi pred bloki:
{layout 'layout.latte'}
{var $seo = 'index, follow'}
Predloga layout.latte
:
<head>
<meta name="robots" content="{$seo}">
</head>
{embed}
Oznaka {embed}
je podobna oznaki {include}
, vendar omogoča vstavljanje blokov v predlogo. Za
razliko od {include}
se posredujejo samo izrecno deklarirane spremenljivke:
{embed 'menu.latte', items: $menuItems}
{/embed}
V tem primeru ima predloga menu.latte
dostop samo do spremenljivke $items
.
Nasprotno pa imajo bloki znotraj {embed}
dostop do vseh okoliških spremenljivk:
{var $name = 'Jan'}
{embed 'menu.latte', items: $menuItems}
{block foo}
{$name}
{/block}
{/embed}
{import}
Oznaka {import}
se uporablja za nalaganje blokov iz drugih predlog. Uvoženim blokom se posredujejo vhodne in
izrecno deklarirane spremenljivke.
{import 'buttons.latte'}
{sandbox}
Oznaka {sandbox}
izolira predlogo za varno obdelavo. Spremenljivke se posredujejo izključno izrecno.
{sandbox 'secure.latte', data: $secureData}