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:
- değişkenler
- karakter dizileri (HEREDOC ve NOWDOC dahil), diziler, sayılar vb.
- operatörler
- fonksiyon ve metot çağrıları (sandbox ile kısıtlanabilir)
- match
- anonim fonksiyonlar
- callback'ler
- çok satırlı yorumlar
/* ... */
- vb…
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.