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