Şablonlar Arasında Değişken Aktarma

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

Değişken Türleri

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

Giriş Değişkenleri, şablona dışarıdan aktarılanlardır, örneğin PHP betiğinden veya {include} gibi bir etiket kullanılarak.

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

Çevre Değişkenleri, belirli bir etiketin yerinde var olan değişkenlerdir. Tüm giriş değişkenlerini ve {var}, {default} gibi etiketlerle veya {foreach} döngüsü içinde oluşturulan diğer değişkenleri içerirler.

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

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

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

{block}

{block} etiketi, kalıtım şablonlarında özelleştirilebilen veya genişletilebilen yeniden kullanılabilir kod blokları tanımlamak için kullanılır. Bloktan önce tanımlanan çevre değişkenleri blok içinde kullanılabilir, ancak değişkenlerdeki herhangi bir değişiklik yalnızca o blok içinde geçerli olur.

{var $foo = 'orijinal'}
{block example}
	{var $foo = 'değiştirilmiş'}
{/block}

{$foo}    // çıktılar: orijinal

{define}

{define} etiketi, {include} ile çağrıldıktan sonra oluşturulan bloklar oluşturmak için kullanılır. Bu bloklar içinde kullanılabilen değişkenler, tanımda parametrelerin belirtilip belirtilmediğine bağlıdır. Eğer belirtilmişse, yalnızca bu parametrelere erişimleri vardır. Eğer belirtilmemişse, blokların tanımlandığı şablonun tüm giriş değişkenlerine erişimleri vardır.

{define hello}
	{* şablonun tüm giriş değişkenlerine erişimi vardır *}
{/define}

{define hello $name}
	{* yalnızca $name parametresine erişimi vardır *}
{/define}

{parameters}

{parameters} etiketi, şablonun başında beklenen giriş değişkenlerini açıkça bildirmek için kullanılır. Bu şekilde, beklenen değişkenleri ve veri türlerini kolayca belgeleyebilirsiniz. Ayrıca varsayılan değerleri de tanımlayabilirsiniz.

{parameters int $age, string $name = 'bilinmiyor'}
<p>Yaş: {$age}, İsim: {$name}</p>

{include file}

{include file} etiketi, tüm bir şablonu dahil etmek için kullanılır. Bu şablona, etiketin kullanıldığı şablonun giriş değişkenleri ve içinde açıkça tanımlanan değişkenler aktarılır. Ancak hedef şablon, {parameters} kullanarak kapsamı sınırlayabilir.

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

{include block}

Aynı şablonda tanımlanmış bir bloğu dahil ettiğinizde, tüm çevre ve açıkça tanımlanmış değişkenler ona aktarılır:

{define blockName}
	<p>İsim: {$name}, Yaş: {$age}</p>
{/define}

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

Bu örnekte, $name ve $age değişkenleri blockName bloğuna aktarılır. {include parent} de aynı şekilde davranır.

Başka bir şablondan bir blok dahil ederken, yalnızca giriş değişkenleri ve açıkça tanımlananlar aktarılır. Çevre değişkenleri otomatik olarak kullanılamaz.

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

{layout} veya {extends}

Bu etiketler, alt şablonun giriş değişkenlerinin ve ayrıca bloklardan önceki kodda oluşturulan değişkenlerin aktarıldığı düzeni 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, ancak blokları şablona dahil etmeyi sağlar. {include}'den farklı olarak, yalnızca açıkça bildirilen değişkenler aktarılır:

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

Bu örnekte, menu.latte şablonunun yalnızca $items değişkenine erişimi vardır.

Tersine, {embed} içindeki bloklarda tüm çevre değişkenlerine erişim vardır:

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

{import}

{import} etiketi, diğer şablonlardan blokları yüklemek için kullanılır. Hem giriş hem de açıkça bildirilen değişkenler içe aktarılan bloklara aktarılır.

{import 'buttons.latte'}

{sandbox}

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

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