Nette Documentation Preview

syntax
Passaggio di variabili tra modelli
**********************************

Questa guida spiega come si passano le variabili tra i template di Latte utilizzando vari tag come `{include}`, `{import}`, `{embed}`, `{layout}`, `{sandbox}` e altri. Imparerete anche come lavorare con le variabili nei tag `{block}` e `{define}` e lo scopo del tag `{parameters}`.


Tipi di variabili .[#toc-types-of-variables]
--------------------------------------------
Le variabili di Latte possono essere suddivise in tre categorie in base a come e dove vengono definite:

Le **variabili di input** sono quelle che vengono passate al template dall'esterno, ad esempio da uno script PHP o utilizzando un tag come `{include}`.

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

Le **Variabili di contorno** sono le variabili esistenti nella posizione di uno specifico tag. Queste includono tutte le variabili di input e altre variabili create usando tag come `{var}`, `{default}`, o all'interno di un ciclo `{foreach}`.

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

Le **Variabili esplicite** sono quelle specificate direttamente all'interno di un tag e inviate al template di destinazione.

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


`{block}`
---------
Il tag `{block}` è usato per definire blocchi di codice riutilizzabili che possono essere personalizzati o estesi in modelli ereditati. Le variabili circostanti definite prima del blocco sono disponibili all'interno del blocco, ma qualsiasi modifica alle variabili si riflette solo all'interno del blocco.

```latte
{var $foo = 'original'}
{block example}
	{var $foo = 'modified'}
{/block}

{$foo}    // outputs: original
```


`{define}`
----------
Il tag `{define}` è usato per creare blocchi che vengono resi solo quando vengono chiamati usando `{include}`. Le variabili disponibili all'interno di questi blocchi dipendono dalla presenza o meno di parametri nella definizione. Se i parametri sono specificati, solo quelli sono accessibili. In caso contrario, sono accessibili tutte le variabili di input del template in cui sono definiti i blocchi.

```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}`
--------------
Il tag `{parameters}` è usato per dichiarare esplicitamente le variabili di input attese all'inizio del template. In questo modo, è possibile documentare facilmente le variabili attese e i loro tipi di dati. È anche possibile definire valori predefiniti.

```latte
{parameters int $age, string $name = 'unknown'}
<p>Age: {$age}, Name: {$name}</p>
```


`{include file}`
----------------
Il tag `{include file}` è usato per inserire un intero template. A questo template vengono passate sia le variabili di input del template in cui viene usato il tag, sia variabili definite esplicitamente. Tuttavia, il template di destinazione può limitare l'ambito utilizzando `{parameters}`.

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


`{include block}`
-----------------
Quando si inserisce un blocco definito nello stesso modello, gli vengono passate tutte le variabili circostanti ed esplicitamente definite:

```latte
{define blockName}
	<p>Name: {$name}, Age: {$age}</p>
{/define}

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

In questo esempio, le variabili `$name` e `$age` vengono passate al blocco `blockName`. Lo stesso comportamento si applica a `{include parent}`.

Quando si inserisce un blocco da un altro template, vengono passate solo le variabili di input e quelle definite esplicitamente. Le variabili circostanti non sono automaticamente disponibili.

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


`{layout}` o `{extends}`
------------------------
Questi tag definiscono un layout a cui passano le variabili di input del template figlio e le variabili create nel codice prima dei blocchi:

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

Template `layout.latte`:

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


`{embed}`
---------
Il tag `{embed}` è simile al tag `{include}`, ma consente di incorporare blocchi nel template. A differenza di `{include}`, vengono passate solo le variabili dichiarate esplicitamente:

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

In questo esempio, il template `menu.latte` ha accesso solo alla variabile `$items`.

Al contrario, i blocchi all'interno di `{embed}` hanno accesso a tutte le variabili circostanti:

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


`{import}`
----------
Il tag `{import}` è usato per caricare blocchi da altri template. Ai blocchi importati vengono passati sia input che variabili dichiarate esplicitamente.

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


`{sandbox}`
-----------
Il tag `{sandbox}` isola il template per un'elaborazione sicura. Le variabili sono passate esclusivamente in modo esplicito.

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


{{leftbar: /@left-menu}}

Passaggio di variabili tra modelli

Questa guida spiega come si passano le variabili tra i template di Latte utilizzando vari tag come {include}, {import}, {embed}, {layout}, {sandbox} e altri. Imparerete anche come lavorare con le variabili nei tag {block} e {define} e lo scopo del tag {parameters}.

Tipi di variabili

Le variabili di Latte possono essere suddivise in tre categorie in base a come e dove vengono definite:

Le variabili di input sono quelle che vengono passate al template dall'esterno, ad esempio da uno script PHP o utilizzando un tag come {include}.

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

Le Variabili di contorno sono le variabili esistenti nella posizione di uno specifico tag. Queste includono tutte le variabili di input e altre variabili create usando tag come {var}, {default}, o all'interno di un ciclo {foreach}.

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

Le Variabili esplicite sono quelle specificate direttamente all'interno di un tag e inviate al template di destinazione.

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

{block}

Il tag {block} è usato per definire blocchi di codice riutilizzabili che possono essere personalizzati o estesi in modelli ereditati. Le variabili circostanti definite prima del blocco sono disponibili all'interno del blocco, ma qualsiasi modifica alle variabili si riflette solo all'interno del blocco.

{var $foo = 'original'}
{block example}
	{var $foo = 'modified'}
{/block}

{$foo}    // outputs: original

{define}

Il tag {define} è usato per creare blocchi che vengono resi solo quando vengono chiamati usando {include}. Le variabili disponibili all'interno di questi blocchi dipendono dalla presenza o meno di parametri nella definizione. Se i parametri sono specificati, solo quelli sono accessibili. In caso contrario, sono accessibili tutte le variabili di input del template in cui sono definiti i blocchi.

{define hello}
	{* has access to all input variables of the template *}
{/define}

{define hello $name}
	{* has access only to the $name parameter *}
{/define}

{parameters}

Il tag {parameters} è usato per dichiarare esplicitamente le variabili di input attese all'inizio del template. In questo modo, è possibile documentare facilmente le variabili attese e i loro tipi di dati. È anche possibile definire valori predefiniti.

{parameters int $age, string $name = 'unknown'}
<p>Age: {$age}, Name: {$name}</p>

{include file}

Il tag {include file} è usato per inserire un intero template. A questo template vengono passate sia le variabili di input del template in cui viene usato il tag, sia variabili definite esplicitamente. Tuttavia, il template di destinazione può limitare l'ambito utilizzando {parameters}.

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

{include block}

Quando si inserisce un blocco definito nello stesso modello, gli vengono passate tutte le variabili circostanti ed esplicitamente definite:

{define blockName}
	<p>Name: {$name}, Age: {$age}</p>
{/define}

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

In questo esempio, le variabili $name e $age vengono passate al blocco blockName. Lo stesso comportamento si applica a {include parent}.

Quando si inserisce un blocco da un altro template, vengono passate solo le variabili di input e quelle definite esplicitamente. Le variabili circostanti non sono automaticamente disponibili.

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

{layout} o {extends}

Questi tag definiscono un layout a cui passano le variabili di input del template figlio e le variabili create nel codice prima dei blocchi:

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

Template layout.latte:

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

{embed}

Il tag {embed} è simile al tag {include}, ma consente di incorporare blocchi nel template. A differenza di {include}, vengono passate solo le variabili dichiarate esplicitamente:

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

In questo esempio, il template menu.latte ha accesso solo alla variabile $items.

Al contrario, i blocchi all'interno di {embed} hanno accesso a tutte le variabili circostanti:

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

{import}

Il tag {import} è usato per caricare blocchi da altri template. Ai blocchi importati vengono passati sia input che variabili dichiarate esplicitamente.

{import 'buttons.latte'}

{sandbox}

Il tag {sandbox} isola il template per un'elaborazione sicura. Le variabili sono passate esclusivamente in modo esplicito.

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