Sözdizimi

Syntax Latte, web tasarımcılarının pratik gereksinimlerinden doğdu. Aksi takdirde gerçek bir meydan okuma olan yapıları zarif bir şekilde yazabileceğiniz en kullanıcı dostu sözdizimini arıyorduk. Aynı zamanda, tüm ifadeler PHP'deki ile tamamen aynı şekilde yazılır, bu nedenle yeni bir dil öğrenmeniz gerekmez. Sadece zaten bildiklerinizden en iyi şekilde faydalanırsınız.

Aşağıda birkaç temel öğeyi gösteren minimal bir şablon bulunmaktadır: etiketler, n:attributes, yorumlar ve filtreler.

{* bu bir yorumdur *}
<ul n:if="$items">               {* n:if is n:atribut *}
{foreach $items as $item}        {* foreach döngüsünü temsil eden etiket *}
	<li>{$item|capitalize}</li>  {* bir değişkeni bir filtre ile yazdıran etiket *}
{/foreach}                       {* döngünün sonu *}

Şimdi bu önemli unsurlara ve inanılmaz bir şablon oluşturmanıza nasıl yardımcı olabileceklerine daha yakından bakalım.

Etiketler

Bir şablon, şablon mantığını (örneğin, foreach döngüleri) veya çıktı ifadelerini kontrol eden etiketler içerir. Her ikisi için de tek bir sınırlayıcı { ... } kullanılır, böylece diğer sistemlerde olduğu gibi hangi durumda hangi sınırlayıcıyı kullanacağınızı düşünmeniz gerekmez. Eğer { karakterinin ardından bir tırnak işareti veya boşluk gelirse, Latte bunu bir etiketin başlangıcı olarak kabul etmez, böylece şablonlarınızda JavaScript yapılarını, JSON'u veya CSS kurallarını sorunsuz bir şekilde kullanabilirsiniz.

Tüm etiketlere genel bak ışı görün. Ayrıca, özel etiketler de oluşturabilirsiniz.

Latte PHP'yi Anlıyor

Etiketlerin içinde iyi bildiğiniz PHP ifadelerini kullanabilirsiniz:

Buna ek olarak, Latte PHP sözdizimine birkaç güzel uzantı ekler.

n:öznitelikler

Tek bir HTML öğesi üzerinde çalışan {if} … {/if} gibi her bir çift etiket n:attribute notasyonunda yazılabilir. Örneğin, yukarıdaki örnekte yer alan {foreach} bu şekilde de yazılabilir:

<ul n:if="$items">
	<li n:foreach="$items as $item">{$item|capitalize}</li>
</ul>

İşlevsellik daha sonra yazıldığı HTML öğesine karşılık gelir:

{var $items = ['I', '♥', 'Latte']}

<p n:foreach="$items as $item">{$item}</p>

Baskılar:

<p>I</p>
<p>♥</p>
<p>Latte</p>

inner- önekini kullanarak davranışı değiştirebilir, böylece işlevselliğin yalnızca öğenin gövdesine uygulanmasını sağlayabiliriz:

<div n:inner-foreach="$items as $item">
	<p>{$item}</p>
	<hr>
</div>

Baskılar:

<div>
	<p>I</p>
	<hr>
	<p>♥</p>
	<hr>
	<p>Latte</p>
	<hr>
</div>

Veya tag- önekini kullanarak işlevsellik yalnızca HTML etiketlerine uygulanır:

<p><a href="{$url}" n:tag-if="$url">Title</a></p>

$url değişkeninin değerine bağlı olarak bu yazdırılacaktır:

// when $url is empty
<p>Title</p>

// when $url equals 'https://nette.org'
<p><a href="https://nette.org">Title</a></p>

Bununla birlikte, n:attributes sadece çift etiketler için bir kısayol değildir, bazı saf n:attribute'lar da vardır, örneğin kodlayıcının en iyi arkadaşı n: class.

Filtreler

Standart filtrelerin özetine bakın.

Latte, boru işareti gösterimini kullanarak filtreleri çağırmaya izin verir (önceki boşluğa izin verilir):

<h1>{$heading|upper}</h1>

Filtreler zincirleme olabilir, bu durumda soldan sağa doğru sırayla uygulanırlar:

<h1>{$heading|lower|capitalize}</h1>

Parametreler filtre adından sonra iki nokta üst üste veya virgülle ayrılmış olarak konur:

<h1>{$heading|truncate:20,''}</h1>

İfade üzerinde filtreler uygulanabilir:

{var $name = ($title|upper) . ($subtitle|lower)}

Blokta:

<h1>{block |lower}{$heading}{/block}</h1>

Veya doğrudan değer üzerinde (ile birlikte {=expr} etiketi):

<h1>{='  Hello world  '|trim}<h1>

Yorumlar

Yorumlar bu şekilde yazılır ve çıktıya girmez:

{* Bu Latte dilinde bir yorumdur *}

PHP yorumları etiketlerin içinde çalışır:

{include 'file.info', /* value: 123 */}

Sözdizimsel Şeker

Tırnak İşareti Olmayan Dizeler

Basit dizeler için tırnak işaretleri atlanabilir:

as in PHP:   {var $arr = ['hello', 'btn--default', '€']}

abbreviated: {var $arr = [hello, btn--default, €]}

Basit dizeler yalnızca harflerden, rakamlardan, alt çizgilerden, tire işaretlerinden ve noktalardan oluşan dizelerdir. Bir rakamla başlamamalı ve bir tire ile başlamamalı veya bitmemelidir. Yalnızca büyük harflerden ve alt çizgilerden oluşmamalıdır, çünkü o zaman bir sabit olarak kabul edilir (örn. PHP_VERSION). Ve and, array, clone, default, false, in, instanceof, new, null, or, return, true, xor anahtar kelimeleriyle çakışmamalıdır.

Kısa Üçlü Operatör

Üçlü işlecin üçüncü değeri boşsa, atlanabilir:

as in PHP:   {$stock ? 'In stock' : ''}

abbreviated: {$stock ? 'In stock'}

Dizide Modern Anahtar Notasyonu

Dizi anahtarları, fonksiyonlar çağrılırken adlandırılmış parametrelere benzer şekilde yazılabilir:

as in PHP:   {var $arr = ['one' => 'item 1', 'two' => 'item 2']}

modern:      {var $arr = [one: 'item 1', two: 'item 2']}

Filtreler

Filtreler herhangi bir ifade için kullanılabilir, sadece bütünü parantez içine alın:

{var $content = ($text|truncate: 30|upper)}

Operatör in

in operatörü in_array() fonksiyonunun yerine kullanılabilir. Karşılaştırma her zaman katıdır:

{* gibi in_array($item, $items, true) *}
{if $item in $items}
	...
{/if}

Tanımsız-Güvenli Operatör ile İsteğe Bağlı Zincirleme

Undefined-safe işleci ??-> nullsafe işlecine benzer ?->, ancak bir değişken, özellik veya dizin mevcut değilse hata oluşturmaz.

{$order??->id}

bu, $order tanımlandığında ve null olmadığında, $order->id 'un hesaplanacağını söylemenin bir yoludur, ancak $order null olduğunda veya mevcut olmadığında, yaptığımız şeyi durdurun ve sadece null döndürün.

Tekrarlayan nullish kontrolleri yapan birçok kodu değiştirmek için kendinizi ?-> kullanırken bulabilirsiniz:

{$user??->address??->street}
// roughly means isset($user) && isset($user->address) ? $user->address->street : null

Tarihe Açılan Bir Pencere

Latte, tarihi boyunca, birkaç yıl sonra PHP'nin kendisinde ortaya çıkan bir dizi sözdizimsel şekerleme ile ortaya çıkmıştır. Örneğin, Latte'de dizileri şu şekilde yazmak mümkündü [1, 2, 3] yerine array(1, 2, 3) veya PHP'de mümkün olmadan çok önce nullsafe operatörünü $obj?->foo kullanabilir. Latte ayrıca PHP'nin bugünkü ...$arr operatörüne eşdeğer olan (expand) $arr dizi genişletme operatörünü de tanıttı.

Latte'deki PHP Sınırlamaları

Latte'de sadece PHP ifadeleri yazılabilir. Yani, Latte'nin etiketlerini sunduğu if, foreach, switch, return, try, throw ve diğerleri gibi sınıfları bildiremez veya kontrol yapılarını kullanamazsınız. Ayrıca nitelikler, geri işaretleri veya sihirli sabitler de kullanamazsınız, çünkü bu mantıklı olmaz. Hatta echo, include, require, exit, eval, unset bile kullanamazsınız, çünkü bunlar fonksiyon değil, özel PHP dili yapılarıdır ve dolayısıyla ifade değildirler.

Ancak, şablon yazarının sorumluluğunda {php ...} etiketinde herhangi bir PHP kodunu kullanmanıza olanak tanıyan RawPhpExtension uzantısını etkinleştirerek bu sınırlamaları aşabilirsiniz.