Nette Documentation Preview

syntax
Şablonlar arasında değişken aktarma
***********************************

Bu kılavuz, Latte'de değişkenlerin `{include}`, `{import}`, `{embed}`, `{layout}`, `{sandbox}` ve diğerleri gibi çeşitli etiketler kullanılarak şablonlar arasında nasıl aktarıldığını anlatır. Ayrıca `{block}` ve `{define}` etiketleri içinde değişkenlerle nasıl çalışılacağını ve `{parameters}` etiketinin amacını da öğreneceksiniz.


Değişken tipleri
----------------
Latte'deki değişkenler, nasıl ve nerede tanımlandıklarına göre üç kategoriye ayrılabilir:

**Girdi değişkenleri**, şablona dışarıdan, örneğin bir PHP betiğinden veya `{include}` gibi bir etiketle aktarılanlardır.

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

**Çevredeki değişkenler**, belirli bir etiketin bulunduğu yerde var olan değişkenlerdir. Buna tüm girdi değişkenleri ile `{var}`, `{default}` gibi etiketlerle ya da bir `{foreach}` döngüsünün içinde oluşturulan diğer değişkenler dahildir.

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

**Açık değişkenler**, doğrudan bir etiketin içinde belirtilen ve hedef şablona gönderilenlerdir.

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


`{block}`
---------
`{block}` etiketi, kalıtım alan şablonlarda özelleştirilebilen veya genişletilebilen, yeniden kullanılabilir kod blokları tanımlamaya yarar. Bloktan önce tanımlanan çevredeki değişkenler bloğun içinde erişilebilirdir, ama değişkenlerdeki her değişiklik yalnızca o bloğun içinde yansır.

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

{$foo}    // çıktı: original
```


`{define}`
----------
`{define}` etiketi, yalnızca `{include}` ile çağrıldıklarında render edilen bloklar oluşturmaya yarar. Bu blokların içinde erişilebilen değişkenler, tanımda parametre bildirilip bildirilmediğine bağlıdır. Bildirilmiş parametreleri olan bir blok hem o parametrelere hem de tanımlandığı şablonun tüm girdi değişkenlerine erişebilir. Parametresiz bir blok da o girdi değişkenlerine erişebilir. Hiçbir durumda çevredeki değişkenler erişilebilir değildir.

```latte
{define hello}
	{* şablonun tüm girdi değişkenlerine erişebilir *}
{/define}

{define hello $name}
	{* $name parametresine ve girdi değişkenlerine erişebilir *}
{/define}
```


`{parameters}`
--------------
`{parameters}` etiketi, beklenen girdi değişkenlerini şablonun başında açıkça bildirmeye yarar. Böylece beklenen değişkenleri ve veri tiplerini kolayca belgeleyebilirsiniz. Varsayılan değerler tanımlamak da mümkündür.

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


`{include file}`
----------------
`{include file}` etiketi, bir şablonun tamamını eklemeye yarar. Bu şablona hem etiketin kullanıldığı şablonun girdi değişkenleri hem de açıkça tanımlanan değişkenler aktarılır. Ancak hedef şablon, kapsamı `{parameters}` ile sınırlayabilir.

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


`{include block}`
-----------------
Aynı şablonda tanımlanmış bir blok eklenirken, ona tüm çevredeki ve açıkça tanımlanan değişkenler aktarılır:

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

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

Bu örnekte `$name` ve `$age` değişkenleri `blockName` bloğuna aktarılır. Aynı davranış `{include parent}` için de geçerlidir.

Başka bir şablondan blok eklenirken yalnızca girdi değişkenleri ve açıkça tanımlanan değişkenler aktarılır. Çevredeki değişkenler otomatik olarak erişilebilir değildir.

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


`{layout}` veya `{extends}`
---------------------------
Bu etiketler, alt şablonun girdi değişkenlerinin ve bloklardan önceki kodda oluşturulan değişkenlerin aktarıldığı bir layout tanımlar:

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

`layout.latte` şablonu:

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


`{embed}`
---------
`{embed}` etiketi `{include}` etiketine benzer, ama şablona blok gömmeyi sağlar. `{include}`'un aksine yalnızca açıkça bildirilen değişkenler aktarılır:

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

Bu örnekte `menu.latte` şablonu yalnızca `$items` değişkenine erişebilir.

Buna karşılık `{embed}` içindeki bloklar tüm çevredeki değişkenlere erişebilir:

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


`{import}`
----------
`{import}` etiketi, başka şablonlardan blok yüklemeye yarar. İçe aktarılan bloklara hem girdi değişkenleri hem de açıkça bildirilen değişkenler aktarılır.

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


`{sandbox}`
-----------
`{sandbox}` etiketi, güvenli işleme için şablonu yalıtır. Değişkenler yalnızca açıkça aktarılır.

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

Şablonlar arasında değişken aktarma

Bu kılavuz, Latte'de değişkenlerin {include}, {import}, {embed}, {layout}, {sandbox} ve diğerleri gibi çeşitli etiketler kullanılarak şablonlar arasında nasıl aktarıldığını anlatır. Ayrıca {block} ve {define} etiketleri içinde değişkenlerle nasıl çalışılacağını ve {parameters} etiketinin amacını da öğreneceksiniz.

Değişken tipleri

Latte'deki değişkenler, nasıl ve nerede tanımlandıklarına göre üç kategoriye ayrılabilir:

Girdi değişkenleri, şablona dışarıdan, örneğin bir PHP betiğinden veya {include} gibi bir etiketle aktarılanlardır.

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

Çevredeki değişkenler, belirli bir etiketin bulunduğu yerde var olan değişkenlerdir. Buna tüm girdi değişkenleri ile {var}, {default} gibi etiketlerle ya da bir {foreach} döngüsünün içinde oluşturulan diğer değişkenler dahildir.

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

Açık değişkenler, doğrudan bir etiketin içinde belirtilen ve hedef şablona gönderilenlerdir.

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

{block}

{block} etiketi, kalıtım alan şablonlarda özelleştirilebilen veya genişletilebilen, yeniden kullanılabilir kod blokları tanımlamaya yarar. Bloktan önce tanımlanan çevredeki değişkenler bloğun içinde erişilebilirdir, ama değişkenlerdeki her değişiklik yalnızca o bloğun içinde yansır.

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

{$foo}    // çıktı: original

{define}

{define} etiketi, yalnızca {include} ile çağrıldıklarında render edilen bloklar oluşturmaya yarar. Bu blokların içinde erişilebilen değişkenler, tanımda parametre bildirilip bildirilmediğine bağlıdır. Bildirilmiş parametreleri olan bir blok hem o parametrelere hem de tanımlandığı şablonun tüm girdi değişkenlerine erişebilir. Parametresiz bir blok da o girdi değişkenlerine erişebilir. Hiçbir durumda çevredeki değişkenler erişilebilir değildir.

{define hello}
	{* şablonun tüm girdi değişkenlerine erişebilir *}
{/define}

{define hello $name}
	{* $name parametresine ve girdi değişkenlerine erişebilir *}
{/define}

{parameters}

{parameters} etiketi, beklenen girdi değişkenlerini şablonun başında açıkça bildirmeye yarar. Böylece beklenen değişkenleri ve veri tiplerini kolayca belgeleyebilirsiniz. Varsayılan değerler tanımlamak da mümkündür.

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

{include file}

{include file} etiketi, bir şablonun tamamını eklemeye yarar. Bu şablona hem etiketin kullanıldığı şablonun girdi değişkenleri hem de açıkça tanımlanan değişkenler aktarılır. Ancak hedef şablon, kapsamı {parameters} ile sınırlayabilir.

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

{include block}

Aynı şablonda tanımlanmış bir blok eklenirken, ona tüm çevredeki ve açıkça tanımlanan değişkenler aktarılır:

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

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

Bu örnekte $name ve $age değişkenleri blockName bloğuna aktarılır. Aynı davranış {include parent} için de geçerlidir.

Başka bir şablondan blok eklenirken yalnızca girdi değişkenleri ve açıkça tanımlanan değişkenler aktarılır. Çevredeki değişkenler otomatik olarak erişilebilir değildir.

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

{layout} veya {extends}

Bu etiketler, alt şablonun girdi değişkenlerinin ve bloklardan önceki kodda oluşturulan değişkenlerin aktarıldığı bir layout tanımlar:

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

layout.latte şablonu:

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

{embed}

{embed} etiketi {include} etiketine benzer, ama şablona blok gömmeyi sağlar. {include}'un aksine yalnızca açıkça bildirilen değişkenler aktarılır:

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

Bu örnekte menu.latte şablonu yalnızca $items değişkenine erişebilir.

Buna karşılık {embed} içindeki bloklar tüm çevredeki değişkenlere erişebilir:

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

{import}

{import} etiketi, başka şablonlardan blok yüklemeye yarar. İçe aktarılan bloklara hem girdi değişkenleri hem de açıkça bildirilen değişkenler aktarılır.

{import 'buttons.latte'}

{sandbox}

{sandbox} etiketi, güvenli işleme için şablonu yalıtır. Değişkenler yalnızca açıkça aktarılır.

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