Nette Documentation Preview

syntax
Предаване на променливи между шаблони
*************************************

Това ръководство ще ви обясни как се предават променливи между шаблони в Latte с помощта на различни тагове като `{include}`, `{import}`, `{embed}`, `{layout}`, `{sandbox}` и други. Ще научите също как да работите с променливи в тага `{block}` и `{define}`, и за какво служи тагът `{parameters}`.


Типове променливи
-----------------
Променливите в Latte можем да разделим на три категории според това как и къде са дефинирани:

**Входни променливи** са тези, които се предават на шаблона отвън, например от PHP скрипт или с помощта на таг като `{include}`.

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

**Околни променливи** са променливи, съществуващи на мястото на определен таг. Включват всички входни променливи и други променливи, създадени с помощта на тагове като `{var}`, `{default}` или в рамките на цикъл `{foreach}`.

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

**Експлицитни променливи** са тези, които са директно специфицирани вътре в тага и се изпращат към целевия шаблон.

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


`{block}`
---------
Тагът `{block}` се използва за дефиниране на повторно използваеми блокове код, които могат да бъдат персонализирани или разширени в наследяващи шаблони. Околните променливи, дефинирани преди блока, са достъпни вътре в блока, но всякакви промени на променливите се отразяват само в рамките на този блок.

```latte
{var $foo = 'оригинален'}
{block example}
	{var $foo = 'променен'}
{/block}

{$foo}    // извежда: оригинален
```


`{define}`
----------
Тагът `{define}` служи за създаване на блокове, които се рендират едва след тяхното извикване с `{include}`. Променливите, достъпни вътре в тези блокове, зависят от това дали в дефиницията са посочени параметри. Ако да, достъп имат само до тези параметри. Ако не, достъп имат до всички входни променливи на шаблона, в който са дефинирани блоковете.

```latte
{define hello}
	{* има достъп до всички входни променливи на шаблона *}
{/define}

{define hello $name}
	{* има достъп само до параметъра $name *}
{/define}
```


`{parameters}`
--------------
Тагът `{parameters}` служи за експлицитно деклариране на очакваните входни променливи в началото на шаблона. По този начин може лесно да се документират очакваните променливи и техните типове данни. Също така е възможно да се дефинират стойности по подразбиране.

```latte
{parameters int $age, string $name = 'неизвестно'}
<p>Възраст: {$age}, Име: {$name}</p>
```


`{include file}`
----------------
Тагът `{include file}` служи за вмъкване на цял шаблон. На този шаблон се предават както входните променливи на шаблона, в който е използван тагът, така и променливите, експлицитно дефинирани в него. Целевият шаблон обаче може да ограничи обхвата с помощта на `{parameters}`.

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


`{include block}`
-----------------
Когато вмъквате блок, дефиниран в същия шаблон, към него се предават всички околни и експлицитно дефинирани променливи:

```latte
{define blockName}
	<p>Име: {$name}, Възраст: {$age}</p>
{/define}

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

В този пример променливите `$name` и `$age` се предават към блока `blockName`. По същия начин се държи и `{include parent}`.

При вмъкване на блок от друг шаблон се предават само входните променливи и експлицитно дефинираните. Околните променливи не са автоматично достъпни.

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


`{layout}` или `{extends}`
--------------------------
Тези тагове дефинират лейаут, към който се предават входните променливи на дъщерния шаблон и по-нататък променливите, създадени в кода преди блоковете:

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

Шаблон `layout.latte`:

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


`{embed}`
---------
Тагът `{embed}` е подобен на тага `{include}`, но позволява вмъкване на блокове в шаблона. За разлика от `{include}`, се предават само експлицитно декларираните променливи:

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

В този пример шаблонът `menu.latte` има достъп само до променливата `$items`.

Напротив, в блоковете вътре в `{embed}` има достъп до всички околни променливи:

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


`{import}`
----------
Тагът `{import}` се използва за зареждане на блокове от други шаблони. Пренасят се както входните, така и експлицитно декларираните променливи към импортираните блокове.

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


`{sandbox}`
-----------
Тагът `{sandbox}` изолира шаблона за безопасна обработка. Променливите се предават изключително експлицитно.

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


{{leftbar: /@left-menu}}

Предаване на променливи между шаблони

Това ръководство ще ви обясни как се предават променливи между шаблони в Latte с помощта на различни тагове като {include}, {import}, {embed}, {layout}, {sandbox} и други. Ще научите също как да работите с променливи в тага {block} и {define}, и за какво служи тагът {parameters}.

Типове променливи

Променливите в Latte можем да разделим на три категории според това как и къде са дефинирани:

Входни променливи са тези, които се предават на шаблона отвън, например от PHP скрипт или с помощта на таг като {include}.

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

Околни променливи са променливи, съществуващи на мястото на определен таг. Включват всички входни променливи и други променливи, създадени с помощта на тагове като {var}, {default} или в рамките на цикъл {foreach}.

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

Експлицитни променливи са тези, които са директно специфицирани вътре в тага и се изпращат към целевия шаблон.

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

{block}

Тагът {block} се използва за дефиниране на повторно използваеми блокове код, които могат да бъдат персонализирани или разширени в наследяващи шаблони. Околните променливи, дефинирани преди блока, са достъпни вътре в блока, но всякакви промени на променливите се отразяват само в рамките на този блок.

{var $foo = 'оригинален'}
{block example}
	{var $foo = 'променен'}
{/block}

{$foo}    // извежда: оригинален

{define}

Тагът {define} служи за създаване на блокове, които се рендират едва след тяхното извикване с {include}. Променливите, достъпни вътре в тези блокове, зависят от това дали в дефиницията са посочени параметри. Ако да, достъп имат само до тези параметри. Ако не, достъп имат до всички входни променливи на шаблона, в който са дефинирани блоковете.

{define hello}
	{* има достъп до всички входни променливи на шаблона *}
{/define}

{define hello $name}
	{* има достъп само до параметъра $name *}
{/define}

{parameters}

Тагът {parameters} служи за експлицитно деклариране на очакваните входни променливи в началото на шаблона. По този начин може лесно да се документират очакваните променливи и техните типове данни. Също така е възможно да се дефинират стойности по подразбиране.

{parameters int $age, string $name = 'неизвестно'}
<p>Възраст: {$age}, Име: {$name}</p>

{include file}

Тагът {include file} служи за вмъкване на цял шаблон. На този шаблон се предават както входните променливи на шаблона, в който е използван тагът, така и променливите, експлицитно дефинирани в него. Целевият шаблон обаче може да ограничи обхвата с помощта на {parameters}.

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

{include block}

Когато вмъквате блок, дефиниран в същия шаблон, към него се предават всички околни и експлицитно дефинирани променливи:

{define blockName}
	<p>Име: {$name}, Възраст: {$age}</p>
{/define}

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

В този пример променливите $name и $age се предават към блока blockName. По същия начин се държи и {include parent}.

При вмъкване на блок от друг шаблон се предават само входните променливи и експлицитно дефинираните. Околните променливи не са автоматично достъпни.

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

{layout} или {extends}

Тези тагове дефинират лейаут, към който се предават входните променливи на дъщерния шаблон и по-нататък променливите, създадени в кода преди блоковете:

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

Шаблон layout.latte:

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

{embed}

Тагът {embed} е подобен на тага {include}, но позволява вмъкване на блокове в шаблона. За разлика от {include}, се предават само експлицитно декларираните променливи:

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

В този пример шаблонът menu.latte има достъп само до променливата $items.

Напротив, в блоковете вътре в {embed} има достъп до всички околни променливи:

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

{import}

Тагът {import} се използва за зареждане на блокове от други шаблони. Пренасят се както входните, така и експлицитно декларираните променливи към импортираните блокове.

{import 'buttons.latte'}

{sandbox}

Тагът {sandbox} изолира шаблона за безопасна обработка. Променливите се предават изключително експлицитно.

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