Nette Documentation Preview

syntax
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 .[#toc-types-of-variables]
---------------------------------------------
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}`.

```php
$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}`.

```latte
{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.

```latte
{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.

```latte
{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.

```latte
{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.

```latte
{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}`.

```latte
{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:

```latte
{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.

```latte
{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:

```latte
{layout 'layout.latte'}
{var $seo = 'index, follow'}
```

Predloga `layout.latte`:

```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:

```latte
{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:

```latte
{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.

```latte
{import 'buttons.latte'}
```


`{sandbox}`
-----------
Oznaka `{sandbox}` izolira predlogo za varno obdelavo. Spremenljivke se posredujejo izključno izrecno.

```latte
{sandbox 'secure.latte', data: $secureData}
```


{{leftbar: /@left-menu}}

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}