Prenos spremenljivk med predlogami
Ta vodnik vam bo pojasnil, kako se spremenljivke prenašajo med predlogami v Latte s pomočjo različnih oznak, kot so
{include}
, {import}
, {embed}
, {layout}
, {sandbox}
in druge.
Izvedeli boste tudi, kako delati s spremenljivkami v oznakah {block}
in {define}
ter čemu služi
oznaka {parameters}
.
Tipi spremenljivk
Spremenljivke v Latte lahko razdelimo v tri kategorije glede na to, kako in kje so definirane:
Vhodne spremenljivke so tiste, ki so v predlogo prenesene od zunaj, na primer iz PHP skripta ali s pomočjo oznake,
kot je {include}
.
$latte->render('template.latte', ['userName' => 'Jan', 'userAge' => 30]);
Okoljske spremenljivke so spremenljivke, ki obstajajo na mestu določene oznake. Vključujejo vse vhodne spremenljivke
in druge spremenljivke, ustvarjene s pomočjo oznak, kot so {var}
, {default}
ali v okviru zanke
{foreach}
.
{foreach $users as $user}
{include 'userBox.latte', user: $user}
{/foreach}
Eksplicitne spremenljivke so tiste, ki so neposredno specificirane znotraj oznake in so poslane v ciljno predlogo.
{include 'userBox.latte', name: $user->name, age: $user->age}
{block}
Oznaka {block}
se uporablja za definiranje ponovno uporabnih blokov kode, ki jih je mogoče v podedovanih
predlogah prilagoditi ali razširiti. Okoljske spremenljivke, definirane pred blokom, so dostopne znotraj bloka, vendar se
kakršne koli spremembe spremenljivk odražajo le znotraj tega bloka.
{var $foo = 'izvirni'}
{block example}
{var $foo = 'spremenjen'}
{/block}
{$foo} // izpiše: izvirni
{define}
Oznaka {define}
služi za ustvarjanje blokov, ki se renderirajo šele po njihovem klicu s pomočjo
{include}
. Spremenljivke, dostopne znotraj teh blokov, so odvisne od tega, ali so v definiciji navedeni parametri.
Če so, imajo dostop le do teh parametrov. Če ne, imajo dostop do vseh vhodnih spremenljivk predloge, v kateri so bloki
definirani.
{define hello}
{* ima dostop do vseh vhodnih spremenljivk predloge *}
{/define}
{define hello $name}
{* ima dostop le do parametra $name *}
{/define}
{parameters}
Oznaka {parameters}
služi za eksplicitno deklaracijo pričakovanih vhodnih spremenljivk na začetku predloge. Na
ta način je mogoče enostavno dokumentirati pričakovane spremenljivke in njihove podatkovne tipe. Prav tako je mogoče
definirati privzete vrednosti.
{parameters int $age, string $name = 'neznano'}
<p>Starost: {$age}, Ime: {$name}</p>
{include file}
Oznaka {include file}
služi za vstavljanje celotne predloge. Tej predlogi se prenašajo tako vhodne spremenljivke
predloge, v kateri je oznaka uporabljena, kot tudi spremenljivke, ki so v njej eksplicitno definirane. Ciljna predloga pa lahko
obseg omeji s pomočjo {parameters}
.
{include 'profile.latte', userId: $user->id}
{include block}
Ko vstavljate blok, definiran v isti predlogi, se vanj prenašajo vse okoljske in eksplicitno definirane spremenljivke:
{define blockName}
<p>Ime: {$name}, Starost: {$age}</p>
{/define}
{var $name = 'Jan', $age = 30}
{include blockName}
V tem primeru se spremenljivki $name
in $age
preneseta v blok blockName
. Na enak
način se obnaša tudi {include parent}
.
Pri vstavljanju bloka iz druge predloge se prenašajo le vhodne in eksplicitno definirane spremenljivke. Okoljske spremenljivke niso samodejno dostopne.
{include blockInOtherTemplate, name: $name, age: $age}
{layout}
ali {extends}
Te oznake definirajo postavitev, v katero se prenašajo vhodne spremenljivke podrejene predloge in nadalje 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 prenašajo le eksplicitno deklarirane spremenljivke:
{embed 'menu.latte', items: $menuItems}
{/embed}
V tem primeru ima predloga menu.latte
dostop le do spremenljivke $items
.
Nasprotno pa je v blokih znotraj {embed}
dostop do vseh okoljskih 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. Prenašajo se tako vhodne kot eksplicitno
deklarirane spremenljivke v uvožene bloke.
{import 'buttons.latte'}
{sandbox}
Oznaka {sandbox}
izolira predlogo za varno obdelavo. Spremenljivke se prenašajo izključno eksplicitno.
{sandbox 'secure.latte', data: $secureData}