Nette Documentation Preview

syntax
Változók átadása sablonokon keresztül
*************************************

Ez az útmutató elmagyarázza, hogy a változókat hogyan adjuk át a sablonok között a Latte-ban különböző címkék segítségével, mint például `{include}`, `{import}`, `{embed}`, `{layout}`, `{sandbox}` és mások. Megtudhatja továbbá, hogyan dolgozzon a `{block}` és a `{define}` címkékben lévő változókkal, valamint a `{parameters}` címke célját.


A változók típusai .[#toc-types-of-variables]
---------------------------------------------
A változókat a Latte-ban három kategóriába sorolhatjuk aszerint, hogy hogyan és hol vannak definiálva:

**Bemeneti változók** azok, amelyeket kívülről adunk át a sablonhoz, például egy PHP szkriptből vagy egy olyan tag segítségével, mint a `{include}`.

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

A **környező változók** egy adott tag helyén létező változók. Ezek közé tartozik minden bemeneti változó és az olyan címkékkel létrehozott egyéb változók, mint a `{var}`, `{default}`, vagy egy cikluson belül a `{foreach}`.

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

**A **explicit változók** azok a változók, amelyeket közvetlenül egy címkén belül határoznak meg és küldenek el a célsablonnak.

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


`{block}`
---------
A `{block}` címke újrafelhasználható kódblokkok definiálására szolgál, amelyek testreszabhatók vagy bővíthetők az örökölt sablonokban. A blokk előtt definiált környező változók a blokkon belül is elérhetőek, de a változók bármilyen módosítása csak az adott blokkban jelenik meg.

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

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


`{define}`
----------
A `{define}` címke olyan blokkok létrehozására szolgál, amelyek csak akkor kerülnek megjelenítésre, ha a `{include}` használatával hívják meg őket. Az ezekben a blokkokban elérhető változók attól függnek, hogy a definícióban meg vannak-e adva paraméterek. Ha paraméterek vannak megadva, csak ezek a paraméterek érhetők el. Ha nem, akkor annak a sablonnak az összes bemeneti változója elérhető, ahol a blokkok definiálva vannak.

```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}`
--------------
A `{parameters}` címkét arra használjuk, hogy a sablon elején kifejezetten deklaráljuk az elvárt bemeneti változókat. Így könnyen dokumentálhatók a várható változók és adattípusaik. Lehetőség van alapértelmezett értékek definiálására is.

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


`{include file}`
----------------
A `{include file}` címke egy teljes sablon beillesztésére szolgál. Ennek a sablonnak átadjuk mind a sablon bemeneti változóit, ahol a taget használjuk, mind az explicit módon definiált változókat. A célsablon azonban a `{parameters}` segítségével korlátozhatja a hatókörét.

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


`{include block}`
-----------------
Egy ugyanabban a sablonban definiált blokk beillesztésekor az összes környező és explicit módon definiált változót átadjuk neki:

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

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

Ebben a példában a `$name` és a `$age` változókat a `blockName` blokknak adjuk át. Ugyanez a viselkedés vonatkozik a `{include parent}`.

Egy másik sablonból származó blokk beillesztésekor csak a bemeneti változók és az explicit módon definiált változók kerülnek átadásra. A környező változók nem állnak automatikusan rendelkezésre.

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


`{layout}` vagy `{extends}`
---------------------------
Ezek a címkék egy olyan elrendezést határoznak meg, amelyhez a gyermek sablon bemeneti változói és a blokkok előtt a kódban létrehozott változók kerülnek átadásra:

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

Sablon `layout.latte`:

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


`{embed}`
---------
A `{embed}` tag hasonló a `{include}` taghez, de lehetővé teszi blokkok beágyazását a sablonba. A `{include}`-tól eltérően csak explicit módon deklarált változókat ad át:

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

Ebben a példában a `menu.latte` sablon csak a `$items` változóhoz fér hozzá.

Ezzel szemben a `{embed}` belsejében lévő blokkok hozzáférnek az összes környező változóhoz:

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


`{import}`
----------
A `{import}` címke más sablonokból származó blokkok betöltésére szolgál. Az importált blokkoknak mind a bemeneti, mind az explicit módon deklarált változókat átadja.

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


`{sandbox}`
-----------
A `{sandbox}` címke elkülöníti a sablont a biztonságos feldolgozás érdekében. A változókat kizárólag explicit módon adjuk át.

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


{{leftbar: /@left-menu}}

Változók átadása sablonokon keresztül

Ez az útmutató elmagyarázza, hogy a változókat hogyan adjuk át a sablonok között a Latte-ban különböző címkék segítségével, mint például {include}, {import}, {embed}, {layout}, {sandbox} és mások. Megtudhatja továbbá, hogyan dolgozzon a {block} és a {define} címkékben lévő változókkal, valamint a {parameters} címke célját.

A változók típusai

A változókat a Latte-ban három kategóriába sorolhatjuk aszerint, hogy hogyan és hol vannak definiálva:

Bemeneti változók azok, amelyeket kívülről adunk át a sablonhoz, például egy PHP szkriptből vagy egy olyan tag segítségével, mint a {include}.

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

környező változók egy adott tag helyén létező változók. Ezek közé tartozik minden bemeneti változó és az olyan címkékkel létrehozott egyéb változók, mint a {var}, {default}, vagy egy cikluson belül a {foreach}.

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

A **explicit változók azok a változók, amelyeket közvetlenül egy címkén belül határoznak meg és küldenek el a célsablonnak.

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

{block}

A {block} címke újrafelhasználható kódblokkok definiálására szolgál, amelyek testreszabhatók vagy bővíthetők az örökölt sablonokban. A blokk előtt definiált környező változók a blokkon belül is elérhetőek, de a változók bármilyen módosítása csak az adott blokkban jelenik meg.

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

{$foo}    // outputs: original

{define}

A {define} címke olyan blokkok létrehozására szolgál, amelyek csak akkor kerülnek megjelenítésre, ha a {include} használatával hívják meg őket. Az ezekben a blokkokban elérhető változók attól függnek, hogy a definícióban meg vannak-e adva paraméterek. Ha paraméterek vannak megadva, csak ezek a paraméterek érhetők el. Ha nem, akkor annak a sablonnak az összes bemeneti változója elérhető, ahol a blokkok definiálva vannak.

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

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

{parameters}

A {parameters} címkét arra használjuk, hogy a sablon elején kifejezetten deklaráljuk az elvárt bemeneti változókat. Így könnyen dokumentálhatók a várható változók és adattípusaik. Lehetőség van alapértelmezett értékek definiálására is.

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

{include file}

A {include file} címke egy teljes sablon beillesztésére szolgál. Ennek a sablonnak átadjuk mind a sablon bemeneti változóit, ahol a taget használjuk, mind az explicit módon definiált változókat. A célsablon azonban a {parameters} segítségével korlátozhatja a hatókörét.

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

{include block}

Egy ugyanabban a sablonban definiált blokk beillesztésekor az összes környező és explicit módon definiált változót átadjuk neki:

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

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

Ebben a példában a $name és a $age változókat a blockName blokknak adjuk át. Ugyanez a viselkedés vonatkozik a {include parent}.

Egy másik sablonból származó blokk beillesztésekor csak a bemeneti változók és az explicit módon definiált változók kerülnek átadásra. A környező változók nem állnak automatikusan rendelkezésre.

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

{layout} vagy {extends}

Ezek a címkék egy olyan elrendezést határoznak meg, amelyhez a gyermek sablon bemeneti változói és a blokkok előtt a kódban létrehozott változók kerülnek átadásra:

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

Sablon layout.latte:

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

{embed}

A {embed} tag hasonló a {include} taghez, de lehetővé teszi blokkok beágyazását a sablonba. A {include}-tól eltérően csak explicit módon deklarált változókat ad át:

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

Ebben a példában a menu.latte sablon csak a $items változóhoz fér hozzá.

Ezzel szemben a {embed} belsejében lévő blokkok hozzáférnek az összes környező változóhoz:

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

{import}

A {import} címke más sablonokból származó blokkok betöltésére szolgál. Az importált blokkoknak mind a bemeneti, mind az explicit módon deklarált változókat átadja.

{import 'buttons.latte'}

{sandbox}

A {sandbox} címke elkülöníti a sablont a biztonságos feldolgozás érdekében. A változókat kizárólag explicit módon adjuk át.

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