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 *}
</ul>
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>
Dinamikus HTML címkék
A Latte támogatja a dinamikus HTML címkéket, amelyek akkor hasznosak, ha a címkék nevének rugalmasságára van szükség:
<h{$level}>Heading</h{$level}>
Például a fenti kód képes generálni <h1>Heading</h1>
vagy
<h2>Heading</h2>
a $level
változó értékétől függően. A Latte dinamikus
HTML-címkéket mindig párosítani kell. Alternatívájuk az n:tag.
Mivel a Latte egy biztonságos templating rendszer, ellenőrzi, hogy a kapott tag neve érvényes-e, és nem tartalmaz-e nem kívánt vagy rosszindulatú értékeket. Azt is biztosítja, hogy a végcímke neve mindig megegyezik a nyitócímke nevével.
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}
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.
Az undefined-safe ??->
operátor, amely hasonló a nullsafe ?->
operátorhoz, de nem okoz
hibát, ha a változó nem létezik, történelmi okokból jött létre, és ma már a standard PHP ?->
operátor
használatát javasoljuk.
PHP korlátozások a Latte-ban
Latte-ban csak PHP-kifejezéseket lehet írni. Vagyis pontosvesszővel végződő utasítások nem használhatók. 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. Nem használhatsz attribútumokat, backtickeket és varázslatos konstansokat sem. A unset
,
echo
, include
, require
, exit
, eval
nem is használható, mivel
ezek nem függvények, hanem speciális PHP nyelvi konstrukciók, tehát nem kifejezések. Csak a többsoros megjegyzések
támogatottak /* ... */
.
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.