Nette Documentation Preview

syntax
Předávání proměnných napříč šablonami
*************************************

Tento průvodce objasňuje, jak se v Latte předávají proměnné mezi šablonami pomocí různých tagů jako `{include}`, `{import}`, `{embed}`, `{layout}`, `{sandbox}` a dalších. Dozvíte se také, jak pracovat s proměnnými v tagu `{block}` a `{define}`, a k čemu slouží značka `{parameters}`.


Typy proměnných
---------------
V Latte rozlišujeme tři kategorie proměnných podle jejich definice a dostupnosti:

**Vstupní proměnné** jsou předávány do šablony zvenčí, typicky z PHP skriptu nebo pomocí tagů jako `{include}`.

```php
$latte->render('template.latte', ['userName' => 'Jan', 'userAge' => 30]);
```

**Okolní proměnné** jsou proměnné existující v místě určité značky. Zahrnují všechny vstupní proměnné a další proměnné vytvořené pomocí tagů jako `{var}`, `{default}` nebo v rámci smyčky `{foreach}`.

```latte
{foreach $users as $user}
	{include 'userBox.latte', user: $user}
{/foreach}
```

**Explicitní proměnné** jsou ty, které jsou přímo specifikovány uvnitř tagu a jsou odeslány do cílové šablony.

```latte
{include 'userBox.latte', name: $user->name, age: $user->age}
```


`{block}`
---------
Tag `{block}` se používá k definování opakovaně použitelných bloků kódu, které lze v dědičných šablonách přizpůsobit nebo rozšířit. Okolní proměnné definované před blokem jsou dostupné uvnitř bloku, ale jakékoli změny proměnných se projeví jen v rámci toho bloku.

```latte
{var $foo = 'původní'}
{block example}
	{var $foo = 'změněný'}
{/block}

{$foo}    // vypíše: původní
```


`{define}`
----------
Tag `{define}` vytváří bloky, které se renderují až po jejich explicitním zavolání pomocí `{include}`. Dostupnost proměnných uvnitř těchto bloků závisí na přítomnosti parametrů v definici. S parametry mají bloky přístup pouze k těmto parametrům. Bez parametrů mají přístup ke všem vstupním proměnným šablony, ve které jsou definovány.

```latte
{define hello}
	{* má přístup ke všem vstupním proměnným šablony *}
{/define}

{define hello $name}
	{* má přístup jen k parametru $name *}
{/define}
```


`{parameters}`
--------------
Tag `{parameters}` slouží k explicitní deklaraci očekávaných vstupních proměnných na začátku šablony. Tímto způsobem lze efektivně dokumentovat očekávané proměnné a jejich datové typy. Umožňuje také definovat výchozí hodnoty.

```latte
{parameters int $age, string $name = 'neznámé'}
<p>Věk: {$age}, Jméno: {$name}</p>
```


`{include file}`
----------------
Tag `{include file}` vkládá celou šablonu. Do vkládané šablony se předávají vstupní proměnné šablony, ve které je značka použita, spolu s explicitně definovanými proměnnými. Cílová šablona může omezit rozsah přijímaných proměnných pomocí `{parameters}`.

```latte
{include 'profile.latte', userId: $user->id}
```


`{include block}`
-----------------
Při vkládání bloku definovaného ve stejné šabloně se do něj předávají všechny okolní a explicitně definované proměnné:

```latte
{define blockName}
	<p>Jméno: {$name}, Věk: {$age}</p>
{/define}

{var $name = 'Jan', $age = 30}
{include blockName}
```

V tomto příkladu jsou proměnné `$name` a `$age` předány do bloku `blockName`. Stejně se chová i `{include parent}`.

Při vkládání bloku z jiné šablony se předávají pouze vstupní proměnné a explicitně definované proměnné. Okolní proměnné nejsou automaticky dostupné.

```latte
{include blockInOtherTemplate, name: $name, age: $age}
```


`{layout}` nebo `{extends}`
---------------------------
Tyto tagy definují layout, do kterého se předávají vstupní proměnné podřízené šablony a proměnné vytvořené v kódu před bloky:

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

Šablona `layout.latte`:

```latte
<head>
	<meta name="robots" content="{$seo}">
</head>
```


`{embed}`
---------
Tag `{embed}` je podobný tagu `{include}`, ale umožňuje vkládání bloků do šablony. Na rozdíl od `{include}` se předávají pouze explicitně deklarované proměnné:

```latte
{embed 'menu.latte', items: $menuItems}
{/embed}
```

V tomto příkladu má šablona `menu.latte` přístup pouze k proměnné `$items`.

Naopak v blocích uvnitř `{embed}` je přístup ke všem okolním proměnným:

```latte
{var $name = 'Jan'}
{embed 'menu.latte', items: $menuItems}
	{block foo}
		{$name}
	{/block}
{/embed}
```


`{import}`
----------
Tag `{import}` se používá pro načítání bloků z jiných šablon. Do importovaných bloků se předávají jak vstupní, tak explicitně deklarované proměnné.

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


`{sandbox}`
-----------
Tag `{sandbox}` izoluje šablonu pro bezpečné zpracování. Proměnné jsou předávány výhradně explicitně, což zvyšuje kontrolu nad daty vstupujícími do izolovaného prostředí.

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

Tento mechanismus umožňuje přesnou kontrolu nad tím, jaká data jsou dostupná v izolované šabloně, což je užitečné pro zpracování potenciálně nebezpečného obsahu.


{{leftbar: /@left-menu}}

Předávání proměnných napříč šablonami

Tento průvodce objasňuje, jak se v Latte předávají proměnné mezi šablonami pomocí různých tagů jako {include}, {import}, {embed}, {layout}, {sandbox} a dalších. Dozvíte se také, jak pracovat s proměnnými v tagu {block} a {define}, a k čemu slouží značka {parameters}.

Typy proměnných

V Latte rozlišujeme tři kategorie proměnných podle jejich definice a dostupnosti:

Vstupní proměnné jsou předávány do šablony zvenčí, typicky z PHP skriptu nebo pomocí tagů jako {include}.

$latte->render('template.latte', ['userName' => 'Jan', 'userAge' => 30]);

Okolní proměnné jsou proměnné existující v místě určité značky. Zahrnují všechny vstupní proměnné a další proměnné vytvořené pomocí tagů jako {var}, {default} nebo v rámci smyčky {foreach}.

{foreach $users as $user}
	{include 'userBox.latte', user: $user}
{/foreach}

Explicitní proměnné jsou ty, které jsou přímo specifikovány uvnitř tagu a jsou odeslány do cílové šablony.

{include 'userBox.latte', name: $user->name, age: $user->age}

{block}

Tag {block} se používá k definování opakovaně použitelných bloků kódu, které lze v dědičných šablonách přizpůsobit nebo rozšířit. Okolní proměnné definované před blokem jsou dostupné uvnitř bloku, ale jakékoli změny proměnných se projeví jen v rámci toho bloku.

{var $foo = 'původní'}
{block example}
	{var $foo = 'změněný'}
{/block}

{$foo}    // vypíše: původní

{define}

Tag {define} vytváří bloky, které se renderují až po jejich explicitním zavolání pomocí {include}. Dostupnost proměnných uvnitř těchto bloků závisí na přítomnosti parametrů v definici. S parametry mají bloky přístup pouze k těmto parametrům. Bez parametrů mají přístup ke všem vstupním proměnným šablony, ve které jsou definovány.

{define hello}
	{* má přístup ke všem vstupním proměnným šablony *}
{/define}

{define hello $name}
	{* má přístup jen k parametru $name *}
{/define}

{parameters}

Tag {parameters} slouží k explicitní deklaraci očekávaných vstupních proměnných na začátku šablony. Tímto způsobem lze efektivně dokumentovat očekávané proměnné a jejich datové typy. Umožňuje také definovat výchozí hodnoty.

{parameters int $age, string $name = 'neznámé'}
<p>Věk: {$age}, Jméno: {$name}</p>

{include file}

Tag {include file} vkládá celou šablonu. Do vkládané šablony se předávají vstupní proměnné šablony, ve které je značka použita, spolu s explicitně definovanými proměnnými. Cílová šablona může omezit rozsah přijímaných proměnných pomocí {parameters}.

{include 'profile.latte', userId: $user->id}

{include block}

Při vkládání bloku definovaného ve stejné šabloně se do něj předávají všechny okolní a explicitně definované proměnné:

{define blockName}
	<p>Jméno: {$name}, Věk: {$age}</p>
{/define}

{var $name = 'Jan', $age = 30}
{include blockName}

V tomto příkladu jsou proměnné $name a $age předány do bloku blockName. Stejně se chová i {include parent}.

Při vkládání bloku z jiné šablony se předávají pouze vstupní proměnné a explicitně definované proměnné. Okolní proměnné nejsou automaticky dostupné.

{include blockInOtherTemplate, name: $name, age: $age}

{layout} nebo {extends}

Tyto tagy definují layout, do kterého se předávají vstupní proměnné podřízené šablony a proměnné vytvořené v kódu před bloky:

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

Šablona layout.latte:

<head>
	<meta name="robots" content="{$seo}">
</head>

{embed}

Tag {embed} je podobný tagu {include}, ale umožňuje vkládání bloků do šablony. Na rozdíl od {include} se předávají pouze explicitně deklarované proměnné:

{embed 'menu.latte', items: $menuItems}
{/embed}

V tomto příkladu má šablona menu.latte přístup pouze k proměnné $items.

Naopak v blocích uvnitř {embed} je přístup ke všem okolním proměnným:

{var $name = 'Jan'}
{embed 'menu.latte', items: $menuItems}
	{block foo}
		{$name}
	{/block}
{/embed}

{import}

Tag {import} se používá pro načítání bloků z jiných šablon. Do importovaných bloků se předávají jak vstupní, tak explicitně deklarované proměnné.

{import 'buttons.latte'}

{sandbox}

Tag {sandbox} izoluje šablonu pro bezpečné zpracování. Proměnné jsou předávány výhradně explicitně, což zvyšuje kontrolu nad daty vstupujícími do izolovaného prostředí.

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

Tento mechanismus umožňuje přesnou kontrolu nad tím, jaká data jsou dostupná v izolované šabloně, což je užitečné pro zpracování potenciálně nebezpečného obsahu.