Szintaxis
A Syntax Latte a webdesignerek gyakorlati igényeiből született. Kerestük a leginkább felhasználóbarát szintaxist, amellyel elegánsan lehet írni olyan konstrukciókat, amelyek egyébként igazi kihívást jelentenek. Ugyanakkor minden kifejezés pontosan ugyanúgy van megírva, mint a PHP-ben, így nem kell új nyelvet tanulnod. Csak a lehető legtöbbet hozod ki abból, amit már tudsz.
Az alábbiakban egy minimális sablont mutatunk be, amely néhány alapelemet szemléltet: címkék, n:attribútumok, megjegyzések és szűrők.
{* ez egy megjegyzés *}
<ul n:if="$items"> {* n:if is n:atribut *}
{foreach $items as $item} {* tag representing foreach loop *}
<li>{$item|capitalize}</li> {* egy változót szűrővel kiíró tag *}
{/foreach} {* ciklus vége *}
Nézzük meg közelebbről ezeket a fontos elemeket, és azt, hogyan segíthetnek egy hihetetlen sablon létrehozásában.
Címkék
A sablon olyan címkéket tartalmaz, amelyek a sablon logikáját (például foreach ciklusok) vagy kimeneti
kifejezéseket vezérlik. Mindkettőhöz egyetlen elválasztójelet használ { ... }
, így nem kell azon gondolkodni,
hogy más rendszerekhez hasonlóan melyik elválasztójelet melyik helyzetben használjuk. Ha a {
karaktert
idézőjel vagy szóköz követi, a Latte nem tekinti azt egy tag kezdetének, így a sablonokban gond nélkül használhat
JavaScript-konstrukciókat, JSON-t vagy CSS-szabályokat.
Lásd az összes címke áttekintését. Ezenkívül egyéni címkéket is létrehozhat.
A Latte érti a PHP-t
A címkéken belül jól ismert PHP-kifejezéseket használhatsz:
- változók
- karakterláncok (beleértve a HEREDOC és NOWDOC karakterláncokat), tömbök, számok stb.
- operátorok
- függvény- és metódushívások (amelyeket a sandbox korlátozhat)
- mérkőzés
- névtelen függvények
- visszahívások
- többsoros megjegyzések
/* ... */
- stb…
Ezen kívül a Latte számos szép kiterjesztést ad a PHP szintaxisához.
n:attribútumok
Az egyes HTML-elemekre ható páros tagek, mint például a {if} … {/if}
, n:attribútum jelöléssel írhatók. A fenti példában szereplő {foreach}
például
így is írható:
<ul n:if="$items">
<li n:foreach="$items as $item">{$item|capitalize}</li>
</ul>
A funkció ekkor annak a HTML-elemnek felel meg, amelyikbe be van írva:
{var $items = ['I', '♥', 'Latte']}
<p n:foreach="$items as $item">{$item}</p>
Nyomtatás:
<p>I</p>
<p>♥</p>
<p>Latte</p>
A inner-
előtag használatával megváltoztathatjuk a viselkedést úgy, hogy a funkció csak az elem testére
vonatkozzon:
<div n:inner-foreach="$items as $item">
<p>{$item}</p>
<hr>
</div>
Nyomtatás:
<div>
<p>I</p>
<hr>
<p>♥</p>
<hr>
<p>Latte</p>
<hr>
</div>
A tag-
előtag használatával a funkciót csak a HTML-címkékre alkalmazzuk:
<p><a href="{$url}" n:tag-if="$url">Title</a></p>
A $url
változó értékétől függően ez kiírásra kerül:
// when $url is empty
<p>Title</p>
// when $url equals 'https://nette.org'
<p><a href="https://nette.org">Title</a></p>
A n:attribútumok azonban nem csak a páros címkék rövidítései, vannak tisztán n:attribútumok is, például a kódoló legjobb barátja, az n:class.
Szűrők
Lásd a szabványos szűrők összefoglalóját.
A Latte lehetővé teszi a szűrők hívását a pipajel jelölés használatával (az előző szóköz megengedett):
<h1>{$heading|upper}</h1>
A szűrők láncolhatók, ebben az esetben balról jobbra haladva alkalmazandók:
<h1>{$heading|lower|capitalize}</h1>
A paraméterek a szűrő neve után kerülnek, kettősponttal vagy vesszővel elválasztva:
<h1>{$heading|truncate:20,''}</h1>
A szűrők kifejezésekre alkalmazhatók:
{var $name = ($title|upper) . ($subtitle|lower)}
Blokkoláskor:
<h1>{block |lower}{$heading}{/block}</h1>
Vagy közvetlenül az értékre (a {=expr}
taggel):
<h1>{=' Hello world '|trim}<h1>
Hozzászólások
A megjegyzések így íródnak, és nem kerülnek be a kimenetbe:
{* ez egy komment a Latte nyelven *}
A PHP-kommentárok a címkéken belül működnek:
{include 'file.info', /* value: 123 */}
Szintaktikai cukor
Idézőjelek nélküli karakterláncok
Az idézőjelek elhagyhatók az egyszerű karakterláncok esetében:
as in PHP: {var $arr = ['hello', 'btn--default', '€']}
abbreviated: {var $arr = [hello, btn--default, €]}
Az egyszerű karakterláncok olyanok, amelyek kizárólag betűkből, számjegyekből, aláhúzásokból, kötőjelekből és
pontokból állnak. Nem kezdődhetnek számjegyekkel, és nem kezdődhetnek és nem végződhetnek kötőjellel. Nem állhat csak
nagybetűkből és aláhúzásokból, mert akkor konstansnak minősül (pl. PHP_VERSION
). És nem ütközhet a
and
, array
, clone
, default
, false
, in
,
instanceof
, new
, null
, or
, return
, true
,
xor
kulcsszavakkal.
Rövid hármas operátor
Ha a terner operátor harmadik értéke üres, akkor elhagyható:
as in PHP: {$stock ? 'In stock' : ''}
abbreviated: {$stock ? 'In stock'}
Modern kulcsjelölés a tömbben
A tömbkulcsok a függvények hívásakor a megnevezett paraméterekhez hasonlóan írhatók:
as in PHP: {var $arr = ['one' => 'item 1', 'two' => 'item 2']}
modern: {var $arr = [one: 'item 1', two: 'item 2']}
Szűrők
A szűrők bármilyen kifejezéshez használhatók, csak zárójelbe kell tenni az egészet:
{var $content = ($text|truncate: 30|upper)}
Operátor in
A in
operátor a in_array()
függvény helyettesítésére használható. Az összehasonlítás
mindig szigorú:
{* like in_array($item, $items, true) *}
{if $item in $items}
...
{/if}
Választható láncolás a meghatározatlan biztonságos operátorral
Az undefined-safe operátor ??->
hasonló a nullsafe operátorhoz ?->
, de nem okoz hibát, ha
egy változó, tulajdonság vagy index egyáltalán nem létezik.
{$order??->id}
ezzel azt akarjuk mondani, hogy ha a $order
definiált és nem null, akkor a $order->id
lesz
kiszámítva, de ha a $order
null vagy nem létezik, akkor hagyjuk abba, amit csinálunk, és csak nullát adunk
vissza.
Lehet, hogy a ?->
használatával sok olyan kódot helyettesíthetsz, amely ismétlődő nullás
ellenőrzéseket végez:
{$user??->address??->street}
// roughly means isset($user) && isset($user->address) ? $user->address->street : null
Egy ablak a történelembe
A Latte története során számos szintaktikai cukorkával rukkolt elő, amelyek néhány évvel később megjelentek
magában a PHP-ben is. Például a Latte-ban lehetséges volt tömböket írni úgy, hogy [1, 2, 3]
array(1, 2, 3)
helyett, vagy használni a nullsafe operátort $obj?->foo
jóval azelőtt, hogy ez
magában a PHP-ben lehetséges lett volna. A Latte bevezette a (expand) $arr
tömbbővítő operátort is, amely a
mai PHP ...$arr
operátornak felel meg.
PHP korlátozások a Latte-ban
A Latte-ban csak PHP kifejezéseket lehet írni. Vagyis nem lehet osztályokat deklarálni vagy vezérlési struktúrákat használni, mint például a
if
, foreach
, switch
, return
, try
, throw
és mások,
amelyek helyett a Latte kínálja a címkéket. Szintén nem használhatsz attribútumokat, backtickeket vagy mágikus konstansokat, mert annak nem lenne értelme. Nem
használhatod még a echo
, include
, require
, exit
, eval
,
unset
, mert ezek nem függvények, hanem speciális PHP nyelvi konstrukciók, tehát nem kifejezések.
Ezeket a korlátozásokat azonban megkerülheti a RawPhpExtension kiterjesztés aktiválásával, amely lehetővé
teszi, hogy a sablon szerzőjének felelősségére bármilyen PHP kódot használjon a {php ...}
tagben.