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}
različica: 3.0