Ş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}