Ş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}
versiyon: 3.x