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}`
--------------------------
Ці теги визначають layout, до якого передаються вхідні змінні дочірнього шаблону, а також змінні, створені в коді перед блоками:

```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 '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}