Nette Documentation Preview

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

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


Типы переменных
---------------
Переменные в Latte можно разделить на три категории в зависимости от того, как и где они определены:

**Входные переменные** — это те, которые передаются в шаблон извне, например, из PHP-скрипта или с помощью тега, такого как `{include}`.

```php
$latte->render('template.latte', ['userName' => 'Ян', '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 = 'Ян', $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 = 'Ян'}
{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' => 'Ян', '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 = 'Ян', $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 = 'Ян'}
{embed 'menu.latte', items: $menuItems}
	{block foo}
		{$name}
	{/block}
{/embed}

{import}

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

{import 'buttons.latte'}

{sandbox}

Тег {sandbox} изолирует шаблон для безопасной обработки. Переменные передаются исключительно явно.

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