Değişkenleri Şablonlar Arasında Geçirme

Bu kılavuzda, {include}, {import}, {embed}, {layout}, {sandbox} ve diğerleri gibi çeşitli etiketler kullanılarak Latte'deki şablonlar arasında değişkenlerin nasıl aktarıldığı açıklanmaktadır. Ayrıca {block} ve {define} etiketlerindeki değişkenlerle nasıl çalışacağınızı ve {parameters} etiketinin amacını öğreneceksiniz.

Değişken Türleri

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

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

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

Çevreleyen Değişkenler belirli bir etiketin bulunduğu yerde var olan değişkenlerdir. Bunlar, tüm girdi değişkenlerini ve {var}, {default} veya bir döngü içinde {foreach} gibi etiketler kullanılarak oluşturulan diğer değişkenleri içerir.

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

Açık Değişkenler doğrudan bir etiket içinde belirtilen ve hedef şablona gönderilen değişkenlerdir.

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

{block}

{block} etiketi, devralınan şablonlarda özelleştirilebilen veya genişletilebilen yeniden kullanılabilir kod bloklarını tanımlamak için kullanılır. Bloktan önce tanımlanan çevreleyen değişkenler blok içinde kullanılabilir, ancak değişkenlerdeki herhangi bir değişiklik yalnızca bu blok içinde yansıtılır.

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

{$foo}    // outputs: original

{define}

{define} etiketi, yalnızca {include} kullanılarak çağrıldığında işlenen bloklar oluşturmak için kullanılır. Bu blokların içinde bulunan değişkenler, tanımda parametrelerin belirtilip belirtilmediğine bağlıdır. Parametreler belirtilmişse, yalnızca bu parametrelere erişilebilir. Belirtilmemişse, blokların tanımlandığı şablonun tüm girdi değişkenlerine erişilebilir.

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

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

{parameters}

{parameters} etiketi, şablonun başında beklenen girdi değişkenlerini açıkça beyan etmek için kullanılır. Bu şekilde, beklenen değişkenleri ve veri türlerini kolayca belgeleyebilirsiniz. Varsayılan değerleri 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ı eklemek için kullanılır. Bu şablona hem etiketin kullanıldığı şablonun girdi değişkenleri hem de açıkça tanımlanmış değişkenler aktarılır. Ancak, hedef şablon {parameters} adresini kullanarak kapsamı sınırlayabilir.

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

{include block}

Aynı şablonda tanımlanmış bir blok eklenirken, tüm çevreleyen ve açıkça tanımlanmış değişkenler buna 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 bir blok eklerken, yalnızca giriş değişkenleri ve açıkça tanımlanmış değişkenler aktarılır. Çevreleyen değişkenler otomatik olarak kullanılamaz.

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

{layout} veya {extends}

Bu etiketler, alt şablonun girdi değişkenlerinin ve bloklardan önce kodda oluşturulan değişkenlerin geçirildiği bir düzen tanımlar:

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

Şablon layout.latte:

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

{embed}

{embed} etiketi {include} etiketine benzer ancak blokların şablona gömülmesine izin verir. {include} etiketinden 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 bloklar çevredeki tüm değişkenlere erişebilir:

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

{import}

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

{import 'buttons.latte'}

{sandbox}

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

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