Sintaxa
Syntax Latte s-a născut din cerințele practice ale designerilor web. Căutam o sintaxă cât mai ușor de utilizat, cu ajutorul căreia să puteți scrie elegant construcții care altfel reprezintă o adevărată provocare. În același timp, toate expresiile sunt scrise exact la fel ca în PHP, astfel încât nu trebuie să învățați un nou limbaj. Pur și simplu profitați la maximum de ceea ce știți deja.
Mai jos este prezentat un șablon minimal care ilustrează câteva elemente de bază: tag-uri, n:attributes, comentarii și filtre.
{* acesta este un comentariu *}
<ul n:if="$items"> {* n:if este n:atribut *}
{foreach $items as $item} {* tag reprezentând bucla foreach *}
<li>{$item|capitalize}</li> {* tag care tipărește o variabilă cu un filtru *}
{/foreach} {* sfârșit de ciclu *}
</ul>
Să analizăm mai îndeaproape aceste elemente importante și modul în care acestea vă pot ajuta să construiți un șablon incredibil.
Etichete
Un șablon conține etichete care controlează logica șablonului (de exemplu, buclele foreach) sau expresiile de
ieșire. Pentru ambele, se utilizează un singur delimitator { ... }
, astfel încât nu trebuie să vă gândiți ce
delimitator să folosiți în fiecare situație, ca în cazul altor sisteme. Dacă caracterul {
este urmat de un
ghilimele sau de un spațiu, Latte nu îl consideră ca fiind începutul unei etichete, astfel încât puteți folosi construcții
JavaScript, JSON sau reguli CSS în șabloanele dvs. fără probleme.
Vedeți prezentarea generală a tuturor etichetelor. În plus, puteți crea, de asemenea, tag-uri personalizate.
Latte înțelege PHP
Puteți utiliza expresii PHP pe care le cunoașteți bine în interiorul etichetelor:
- variabile
- șiruri de caractere (inclusiv HEREDOC și NOWDOC), matrice, numere etc.
- operatori
- apeluri de funcții și metode (care pot fi restricționate de sandbox)
- potrivire
- funcții anonime
- callback-uri
- comentarii pe mai multe rânduri
/* ... */
- etc…
În plus, Latte adaugă câteva extensii frumoase la sintaxa PHP.
n:atribute
Fiecare etichetă pereche, cum ar fi {if} … {/if}
, care acționează asupra unui singur element HTML poate fi
scrisă în notația n:attribute. De exemplu, {foreach}
din exemplul de mai sus poate
fi scris și în acest fel:
<ul n:if="$items">
<li n:foreach="$items as $item">{$item|capitalize}</li>
</ul>
Funcționalitatea corespunde apoi elementului HTML în care este scrisă:
{var $items = ['I', '♥', 'Latte']}
<p n:foreach="$items as $item">{$item}</p>
Imprimă:
<p>I</p>
<p>♥</p>
<p>Latte</p>
Prin utilizarea prefixului inner-
putem modifica comportamentul astfel încât funcționalitatea să se aplice
doar corpului elementului:
<div n:inner-foreach="$items as $item">
<p>{$item}</p>
<hr>
</div>
Imprimă:
<div>
<p>I</p>
<hr>
<p>♥</p>
<hr>
<p>Latte</p>
<hr>
</div>
Sau prin utilizarea prefixului tag-
, funcționalitatea se aplică numai la etichetele HTML:
<p><a href={$url} n:tag-if="$url">Title</a></p>
În funcție de valoarea variabilei $url
, se va imprima:
// when $url is empty
<p>Title</p>
// when $url equals 'https://nette.org'
<p><a href="https://nette.org">Title</a></p>
Cu toate acestea, n:attributes nu sunt doar o prescurtare pentru etichetele pereche, ci există și unele atribute n:pure, de exemplu, cel mai bun prieten al programatorului, n:class.
Filtre
A se vedea rezumatul filtrelor standard.
Latte permite apelarea filtrelor utilizând notația semnului pipe (este permisă folosirea unui spațiu înainte):
<h1>{$heading|upper}</h1>
Filtrele pot fi înlănțuite, caz în care se aplică în ordine de la stânga la dreapta:
<h1>{$heading|lower|capitalize}</h1>
Parametrii se pun după numele filtrului, separați prin două puncte sau virgulă:
<h1>{$heading|truncate:20,''}</h1>
Filtrele pot fi aplicate pe expresie:
{var $name = ($title|upper) . ($subtitle|lower)}
Pe bloc:
<h1>{block |lower}{$heading}{/block}</h1>
Sau direct pe valoare (în combinație cu {=expr}
tag):
<h1>{=' Hello world '|trim}<h1>
Etichete HTML dinamice
Latte acceptă etichete HTML dinamice, care sunt utile atunci când aveți nevoie de flexibilitate în ceea ce privește numele etichetelor:
<h{$level}>Heading</h{$level}>
De exemplu, codul de mai sus poate genera <h1>Heading</h1>
sau
<h2>Heading</h2>
în funcție de valoarea variabilei $level
. Etichetele HTML dinamice din
Latte trebuie să fie întotdeauna asociate. Alternativa lor este n:tag.
Deoarece Latte este un sistem securizat de creare de șabloane, acesta verifică dacă numele tag-ului rezultat este valid și nu conține valori nedorite sau rău intenționate. De asemenea, se asigură că numele tag-ului final este întotdeauna același cu numele tag-ului de deschidere.
Comentarii
Comentariile sunt scrise în acest mod și nu se introduc în text:
{* acest lucru este un comentariu în Latte *}}
Comentariile PHP funcționează în interiorul etichetelor:
{include 'file.info', /* value: 123 */}
Zahăr sintactic
Șiruri de caractere fără ghilimele
Ghilimelele pot fi omise în cazul șirurilor de caractere simple:
as in PHP: {var $arr = ['hello', 'btn--default', '€']}
abbreviated: {var $arr = [hello, btn--default, €]}
Șirurile de caractere simple sunt cele care sunt alcătuite exclusiv din litere, cifre, liniuțe, sublinieri, cratime și
puncte. Ele nu trebuie să înceapă cu o cifră și nu trebuie să înceapă sau să se termine cu o cratimă. Nu trebuie să
fie compuse numai din litere majuscule și liniuțe de subliniere, pentru că atunci este considerată o constantă (de exemplu,
PHP_VERSION
). Și nu trebuie să intre în coliziune cu cuvintele-cheie and
, array
,
clone
, default
, false
, in
, instanceof
, new
,
null
, or
, return
, true
, xor
.
Operator ternar scurt
În cazul în care a treia valoare a operatorului ternar este goală, aceasta poate fi omisă:
as in PHP: {$stock ? 'In stock' : ''}
abbreviated: {$stock ? 'In stock'}
Notarea modernă a cheilor în matrice
Cheile din array pot fi scrise în mod similar cu parametrii numiți la apelarea funcțiilor:
as in PHP: {var $arr = ['one' => 'item 1', 'two' => 'item 2']}
modern: {var $arr = [one: 'item 1', two: 'item 2']}
Filtre
Filtrele pot fi utilizate pentru orice expresie, trebuie doar să le includeți între paranteze:
{var $content = ($text|truncate: 30|upper)}
Operator in
Operatorul in
poate fi utilizat pentru a înlocui funcția in_array()
. Comparația este întotdeauna
strictă:
{* like in_array($item, $items, true) *}
{if $item in $items}
...
{/if}
O fereastră în istorie
Latte a venit cu o serie de bomboane sintactice de-a lungul istoriei sale, care au apărut în PHP însuși câțiva ani mai
târziu. De exemplu, în Latte era posibil să se scrie array-uri ca [1, 2, 3]
în loc de array(1, 2, 3)
sau de a utiliza operatorul nullsafe $obj?->foo
cu mult înainte ca acest lucru să fie posibil în PHP. Latte a
introdus, de asemenea, operatorul de expansiune a tablourilor (expand) $arr
, care este echivalentul operatorului
...$arr
de astăzi din PHP.
Operatorul undefined-safe ??->
, care este similar cu operatorul nullsafe ?->
, dar care nu
generează o eroare dacă variabila nu există, a fost creat din motive istorice, iar astăzi recomandăm utilizarea operatorului
standard PHP ?->
.
Limitări ale PHP în Latte
În Latte pot fi scrise numai expresii PHP. Adică, nu pot fi folosite expresii care se termină cu punct și virgulă. Nu
puteți declara clase sau utiliza structuri de
control, cum ar fi if
, foreach
, switch
, return
, try
,
throw
și altele, în locul cărora Latte oferă etichetele sale. De
asemenea, nu puteți utiliza atribute, backticks sau constante magice. Nu puteți folosi nici măcar
unset
, echo
, , include
, require
, , exit
, eval
,
deoarece acestea nu sunt funcții, ci construcții speciale ale limbajului PHP și, prin urmare, nu sunt expresii. Sunt acceptate
doar comentariile pe mai multe rânduri /* ... */
.
Cu toate acestea, puteți ocoli aceste limitări prin activarea extensiei RawPhpExtension, care vă permite să utilizați orice cod PHP
în tag-ul {php ...}
pe răspunderea autorului șablonului.