Sözdizimi

Latte sözdizimi, web tasarımcılarının pratik gereksinimlerinden doğmuştur. Aksi takdirde gerçek bir baş ağrısı olan yapıları bile zarif bir şekilde yazabileceğiniz en kullanıcı dostu sözdizimini aradık. Aynı zamanda tüm ifadeler tıpkı PHP'deki gibi yazılır, bu yüzden yeni bir dil öğrenmenize gerek kalmaz. Sadece zaten bildiklerinizi kullanırsınız.

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

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

Bu önemli öğelere ve harika bir şablon oluşturmanıza nasıl yardımcı olabileceklerine daha yakından bakalım.

Etiketler

Şablon, şablonun mantığını kontrol eden (örneğin foreach döngüleri) veya ifadeleri yazdıran 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üşünmenize gerek kalmaz. Eğer { karakterini bir tırnak işareti veya boşluk takip ederse, Latte bunu bir etiketin başlangıcı olarak kabul etmez, bu sayede şablonlarda JavaScript yapılarını, JSON'u veya CSS kurallarını sorunsuz bir şekilde kullanabilirsiniz.

Tüm etiketlerin özeti'ne göz atın. Ayrıca, özel etiketler de oluşturabilirsiniz.

Latte PHP'yi Anlar

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

Ayrıca Latte, PHP sözdizimini birkaç güzel uzantılar ile tamamlar.

n:nitelikler

Tek bir HTML öğesi üzerinde çalışan {if} … {/if} gibi tüm çift etiketler, n:nitelik biçiminde yeniden yazılabilir. Örneğin, giriş örneğindeki {foreach} de bu şekilde yazılabilir:

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

İşlevsellik daha sonra yerleştirildiği HTML öğesine uygulanır:

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

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

yazdırır:

<p>Ben</p>
<p>♥</p>
<p>Latte</p>

inner- önekini kullanarak, davranışı yalnızca öğenin iç kısmına uygulanacak şekilde ayarlayabiliriz:

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

Yazdırılacak:

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

Veya tag- önekini kullanarak işlevselliği yalnızca HTML etiketlerinin kendisine uygularız:

<p><a href={$url} n:tag-if="$url">Başlık</a></p>

Bu, $url değişkenine bağlı olarak yazdırılır:

{* $url boş olduğunda *}
<p>Başlık</p>

{* $url 'https://nette.org' içerdiğinde *}
<p><a href="https://nette.org">Başlık</a></p>

Ancak, n:nitelikler yalnızca çift etiketler için bir kısayol değildir. n:href veya kodlayıcının çok kullanışlı yardımcısı n:class gibi saf n:nitelikler de vardır.

Filtreler

Standart filtreler özetine bakın.

Filtreler dikey çubuktan sonra yazılır (önünde bir boşluk olabilir):

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

Filtreler zincirlenebilir ve ardından soldan sağa doğru sırayla uygulanır:

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

Parametreler, filtre adından sonra iki nokta üst üste veya virgülle ayrılarak girilir:

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

Filtreler bir ifadeye de uygulanabilir:

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

Bir bloğa:

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

Veya doğrudan değere ({=expr} etiketiyle kombinasyon halinde):

<h1>{='  Merhaba dünya  '|trim}<h1>

Dinamik HTML Etiketleri

Latte, etiket adlarında esnekliğe ihtiyaç duyduğunuzda kullanışlı olan dinamik HTML etiketlerini destekler:

<h{$level}>Başlık</h{$level}>

Yukarıdaki kod, örneğin $level değişkeninin değerine bağlı olarak <h1>Başlık</h1> veya <h2>Başlık</h2> oluşturabilir. Latte'deki dinamik HTML etiketleri her zaman çift olmalıdır. Alternatifleri n:tag'dır.

Latte güvenli bir şablonlama sistemi olduğundan, sonuçtaki etiket adının geçerli olup olmadığını ve istenmeyen veya zararlı değerler içermediğini kontrol eder. Ayrıca, bitiş etiketinin adının her zaman başlangıç etiketinin adıyla aynı olmasını sağlar.

Yorumlar

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

{* bu Latte'de bir yorumdur *}

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

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

Sözdizimsel Şeker

Tırnaksız Karakter Dizileri

Basit karakter dizileri için tırnak işaretleri atlanabilir:

PHP'deki gibi:  {var $arr = ['merhaba', 'btn--default', '€']}

kısaltılmış:    {var $arr = [merhaba, btn--default, €]}

Basit karakter dizileri, yalnızca harfler, rakamlar, alt çizgiler, tireler ve noktalardan oluşanlardır. Rakamla başlayamazlar ve tire ile başlayamaz veya bitemezler. Yalnızca büyük harfler ve alt çizgilerden oluşamazlar, çünkü o zaman bir sabit olarak kabul edilirler (ör. PHP_VERSION). Ve anahtar kelimelerle çakışamazlar: and, array, clone, default, false, in, instanceof, new, null, or, return, true, xor.

Sabitler

Basit karakter dizilerinde tırnak işaretleri atlanabildiğinden, ayırt etmek için genel sabitleri başında eğik çizgi ile yazmanızı öneririz:

{if \PROJECT_ID === 1} ... {/if}

Bu yazım PHP'nin kendisinde tamamen geçerlidir, eğik çizgi sabitin genel ad alanında olduğunu söyler.

Kısaltılmış Üçlü Operatör

Üçlü operatörün üçüncü değeri boşsa, atlanabilir:

PHP'deki gibi:  {$stock ? 'Stokta' : ''}

kısaltılmış:    {$stock ? 'Stokta'}

Dizide Modern Anahtar Yazımı

Dizideki anahtarlar, fonksiyon çağrılarındaki adlandırılmış parametrelere benzer şekilde yazılabilir:

PHP'deki gibi:  {var $arr = ['one' => 'öğe 1', 'two' => 'öğe 2']}

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

Filtreler

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

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

in Operatörü

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

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

Tarihsel Pencere

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

Değişkenin var olmaması durumunda hata vermeyen nullsafe operatörü ?->'nun bir benzeri olan tanımsız-güvenli operatör ??->, tarihsel nedenlerden dolayı ortaya çıktı ve bugün standart PHP operatörü ?->'yu kullanmanızı öneririz.

Latte'de PHP Kısıtlamaları

Latte'de yalnızca PHP ifadeleri yazılabilir. Yani noktalı virgülle biten deyimler kullanılamaz. Sınıflar bildirilemez veya kontrol yapıları kullanılamaz, örneğin if, foreach, switch, return, try, throw ve diğerleri, bunların yerine Latte kendi etiketler'ini sunar. Ayrıca nitelikler, backtick'ler veya bazı sihirli sabitler kullanılamaz. unset, echo, include, require, exit, eval de kullanılamaz, çünkü bunlar fonksiyonlar değil, özel PHP dil yapılarıdır ve dolayısıyla ifadeler değildir. Yorumlar yalnızca çok satırlı /* ... */ desteklenir.

Ancak bu kısıtlamalar, RawPhpExtension uzantısını etkinleştirerek aşılabilir, bu sayede {php ...} etiketinde şablon yazarının sorumluluğunda herhangi bir PHP kodu kullanılabilir.

versiyon: 3.0