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 *}
</ul>
Ş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:
- değişkenler
- dizeler (HEREDOC ve NOWDOC dahil), diziler, sayılar, vb.
- operatörler
- fonksiyon ve metot çağrıları ( sandbox tarafından kısıtlanabilir)
- maç
- anonim fonksiyonlar
- geri aramalar
- çok satırlı yorumlar
/* ... */
- vs…
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>
Dinamik HTML Etiketleri
Latte, etiket adlarında esnekliğe ihtiyaç duyduğunuzda yararlı olan dinamik HTML etiketlerini destekler:
<h{$level}>Heading</h{$level}>
Örneğin, yukarıdaki kod şunları üretebilir <h1>Heading</h1>
veya
<h2>Heading</h2>
değişkeninin değerine bağlı olarak $level
. Latte'deki dinamik HTML
etiketleri her zaman eşleştirilmelidir. Alternatifleri n:tag.
Latte güvenli bir şablonlama sistemi olduğundan, ortaya çıkan etiket adının geçerli olup olmadığını ve istenmeyen veya kötü amaçlı değerler içermediğini kontrol eder. Ayrıca, son etiket adının her zaman açılış etiketi adıyla aynı olmasını sağlar.
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}
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ı.
?->
nullsafe işlecine benzeyen, ancak değişken mevcut değilse hata vermeyen undefined-safe işleci
??->
tarihsel nedenlerle oluşturulmuştur ve bugün standart PHP işlecini ?->
kullanmanızı
öneririz.
Latte'deki PHP Sınırlamaları
Latte'de sadece PHP ifadeleri yazılabilir. Yani, noktalı virgül ile biten ifadeler kullanılamaz. 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 nitelikleri, geri işaretlerini veya sihirli sabitleri kullanamazsınız. unset
,
echo
, include
, require
, exit
, eval
bile kullanamazsınız,
çünkü bunlar işlev değil, özel PHP dili yapılarıdır ve dolayısıyla ifade değildirler. Sadece çok satırlı yorumlar
desteklenir /* ... */
.
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.