Σύνταξη
Η Syntax Latte γεννήθηκε από τις πρακτικές απαιτήσεις των σχεδιαστών ιστοσελίδων. Ψάχναμε για την πιο φιλική προς το χρήστη σύνταξη, με την οποία μπορείτε να γράψετε κομψά δομές που διαφορετικά αποτελούν πραγματική πρόκληση. Ταυτόχρονα, όλες οι εκφράσεις γράφονται ακριβώς όπως και στην PHP, οπότε δεν χρειάζεται να μάθετε μια νέα γλώσσα. Απλώς αξιοποιείτε στο έπακρο αυτό που ήδη γνωρίζετε.
Ακολουθεί ένα ελάχιστο πρότυπο που απεικονίζει μερικά βασικά στοιχεία: ετικέτες, n:attributes, σχόλια και φίλτρα.
{* αυτό είναι ένα σχόλιο *}
<ul n:if="$items"> {* n:if is n:atribut *}
{foreach $items as $item} {* tag που αντιπροσωπεύει τον βρόχο foreach *}
<li>{$item|capitalize}</li> {* ετικέτα που εκτυπώνει μια μεταβλητή με φίλτρο *}
{/foreach} {* τέλος του κύκλου *}
</ul>
Ας ρίξουμε μια πιο προσεκτική ματιά σε αυτά τα σημαντικά στοιχεία και πώς μπορούν να σας βοηθήσουν να δημιουργήσετε ένα απίστευτο πρότυπο.
Ετικέτες
Ένα πρότυπο περιέχει ετικέτες που ελέγχουν τη λογική του προτύπου
(για παράδειγμα, βρόχους foreach) ή εκφράσεις εξόδου. Και για τα δύο,
χρησιμοποιείται ένας μόνο διαχωριστής { ... }
, οπότε δεν
χρειάζεται να σκεφτείτε ποιο διαχωριστή να χρησιμοποιήσετε σε ποια
περίπτωση, όπως συμβαίνει με άλλα συστήματα. Αν ο χαρακτήρας {
ακολουθείται από ένα εισαγωγικό ή ένα κενό, το Latte δεν θεωρεί ότι είναι
η αρχή μιας ετικέτας, οπότε μπορείτε να χρησιμοποιήσετε δομές JavaScript, JSON
ή κανόνες CSS στα πρότυπά σας χωρίς προβλήματα.
Δείτε την επισκόπηση όλων των ετικετών. Επιπλέον, μπορείτε επίσης να δημιουργήσετε προσαρμοσμένες ετικέτες.
Το Latte κατανοεί την PHP
Μπορείτε να χρησιμοποιήσετε εκφράσεις PHP που γνωρίζετε καλά μέσα στις ετικέτες:
- μεταβλητές
- συμβολοσειρές (συμπεριλαμβανομένων των HEREDOC και NOWDOC), πίνακες, αριθμοί, κ.λπ.
- τελεστές
- κλήσεις συναρτήσεων και μεθόδων (οι οποίες μπορούν να περιοριστούν από το sandbox)
- αντιστοιχία
- ανώνυμες συναρτήσεις
- ανακλήσεις
- σχόλια πολλών γραμμών
/* ... */
- κ.λπ…
Επιπλέον, η Latte προσθέτει αρκετές ωραίες επεκτάσεις στη σύνταξη της PHP.
n:attributes
Κάθε ετικέτα ζεύγους, όπως το {if} … {/if}
, που λειτουργεί σε ένα
μόνο στοιχείο HTML μπορεί να γραφτεί με τον συμβολισμό n:attribute. Για παράδειγμα, το {foreach}
στο παραπάνω
παράδειγμα θα μπορούσε επίσης να γραφτεί με αυτόν τον τρόπο:
<ul n:if="$items">
<li n:foreach="$items as $item">{$item|capitalize}</li>
</ul>
Η λειτουργικότητα αντιστοιχεί τότε στο στοιχείο HTML στο οποίο γράφεται:
{var $items = ['I', '♥', 'Latte']}
<p n:foreach="$items as $item">{$item}</p>
Εκτυπώσεις:
<p>I</p>
<p>♥</p>
<p>Latte</p>
Με τη χρήση του προθέματος inner-
μπορούμε να αλλάξουμε τη
συμπεριφορά έτσι ώστε η λειτουργικότητα να ισχύει μόνο για το σώμα του
στοιχείου:
<div n:inner-foreach="$items as $item">
<p>{$item}</p>
<hr>
</div>
Εκτυπώσεις:
<div>
<p>I</p>
<hr>
<p>♥</p>
<hr>
<p>Latte</p>
<hr>
</div>
Η με τη χρήση του προθέματος tag-
η λειτουργικότητα εφαρμόζεται
μόνο στις ετικέτες HTML:
<p><a href={$url} n:tag-if="$url">Title</a></p>
Ανάλογα με την τιμή της μεταβλητής $url
αυτό θα εκτυπωθεί:
// when $url is empty
<p>Title</p>
// when $url equals 'https://nette.org'
<p><a href="https://nette.org">Title</a></p>
Ωστόσο, τα n:attributes δεν είναι μόνο μια συντόμευση για τις ετικέτες ζεύγους, υπάρχουν και κάποια καθαρά n:attributes, για παράδειγμα ο καλύτερος φίλος του κωδικοποιητή n:class.
Φίλτρα
Δείτε τη σύνοψη των τυπικών φίλτρων.
Το Latte επιτρέπει την κλήση φίλτρων με τη χρήση του συμβολισμού με το σύμβολο του σωλήνα (επιτρέπεται το κενό που προηγείται):
<h1>{$heading|upper}</h1>
Τα φίλτρα μπορούν να είναι αλυσιδωτά, οπότε εφαρμόζονται με τη σειρά από αριστερά προς τα δεξιά:
<h1>{$heading|lower|capitalize}</h1>
Οι παράμετροι τοποθετούνται μετά το όνομα του φίλτρου χωρισμένες με άνω και κάτω τελεία ή κόμμα:
<h1>{$heading|truncate:20,''}</h1>
Τα φίλτρα μπορούν να εφαρμοστούν στην έκφραση:
{var $name = ($title|upper) . ($subtitle|lower)}
Στο μπλοκάρισμα:
<h1>{block |lower}{$heading}{/block}</h1>
(σε συνδυασμό με {=expr}
tag):
<h1>{=' Hello world '|trim}<h1>
Δυναμικές ετικέτες HTML
Το Latte υποστηρίζει δυναμικές ετικέτες HTML, οι οποίες είναι χρήσιμες όταν χρειάζεστε ευελιξία στα ονόματα των ετικετών:
<h{$level}>Heading</h{$level}>
Για παράδειγμα, ο παραπάνω κώδικας μπορεί να δημιουργήσει
<h1>Heading</h1>
ή <h2>Heading</h2>
ανάλογα με την τιμή της
μεταβλητής $level
. Οι δυναμικές ετικέτες HTML στο Latte πρέπει πάντα να
είναι ζευγαρωμένες. Η εναλλακτική τους είναι η n:tag.
Επειδή το Latte είναι ένα ασφαλές σύστημα διαμόρφωσης προτύπων, ελέγχει ότι το όνομα της ετικέτας που προκύπτει είναι έγκυρο και δεν περιέχει ανεπιθύμητες ή κακόβουλες τιμές. Εξασφαλίζει επίσης ότι το όνομα της τελικής ετικέτας είναι πάντα το ίδιο με το όνομα της ετικέτας έναρξης.
Σχόλια
Τα σχόλια γράφονται με αυτόν τον τρόπο και δεν μπαίνουν στην έξοδο:
{* Αυτό είναι ένα σχόλιο στο Latte *}
Τα σχόλια της PHP λειτουργούν μέσα σε ετικέτες:
{include 'file.info', /* value: 123 */}
Συντακτική Ζάχαρη
Συμβολοσειρές χωρίς εισαγωγικά
Τα εισαγωγικά μπορούν να παραλειφθούν για απλές συμβολοσειρές:
as in PHP: {var $arr = ['hello', 'btn--default', '€']}
abbreviated: {var $arr = [hello, btn--default, €]}
Οι απλές συμβολοσειρές είναι εκείνες που αποτελούνται αποκλειστικά
από γράμματα, ψηφία, υπογράμμιση, παύλες και τελείες. Δεν πρέπει να
αρχίζουν με ψηφίο και δεν πρέπει να αρχίζουν ή να τελειώνουν με παύλα.
Δεν πρέπει να αποτελείται μόνο από κεφαλαία γράμματα και υπογράμμιση,
γιατί τότε θεωρείται σταθερά (π.χ. PHP_VERSION
). Και δεν πρέπει να
συγκρούεται με τις λέξεις-κλειδιά and
, array
, clone
,
default
, false
, in
, instanceof
, new
, null
,
or
, return
, true
, xor
.
Σύντομος τριμερής τελεστής
Εάν η τρίτη τιμή του τριμερούς τελεστή είναι κενή, μπορεί να παραλειφθεί:
as in PHP: {$stock ? 'In stock' : ''}
abbreviated: {$stock ? 'In stock'}
Σύγχρονος συμβολισμός κλειδιών στη συστοιχία
Τα κλειδιά της συστοιχίας μπορούν να γραφούν παρόμοια με τις ονομαστικές παραμέτρους κατά την κλήση συναρτήσεων:
as in PHP: {var $arr = ['one' => 'item 1', 'two' => 'item 2']}
modern: {var $arr = [one: 'item 1', two: 'item 2']}
Φίλτρα
Τα φίλτρα μπορούν να χρησιμοποιηθούν για οποιαδήποτε έκφραση, απλά περικλείστε το σύνολο σε αγκύλες:
{var $content = ($text|truncate: 30|upper)}
Χειριστής in
Ο τελεστής in
μπορεί να χρησιμοποιηθεί για την αντικατάσταση
της συνάρτησης in_array()
. Η σύγκριση είναι πάντα αυστηρή:
{* όπως in_array($item, $items, true) *}
{if $item in $items}
...
{/if}
Ένα παράθυρο στην ιστορία
Η Latte έχει επινοήσει μια σειρά από συντακτικές καραμέλες κατά τη
διάρκεια της ιστορίας της, οι οποίες εμφανίστηκαν στην ίδια την PHP λίγα
χρόνια αργότερα. Για παράδειγμα, στη Latte ήταν δυνατό να γράψετε πίνακες
ως [1, 2, 3]
αντί για array(1, 2, 3)
ή να χρησιμοποιήσετε τον
τελεστή nullsafe $obj?->foo
πολύ πριν αυτό καταστεί δυνατό στην ίδια
την PHP. Η Latte εισήγαγε επίσης τον τελεστή επέκτασης πινάκων
(expand) $arr
, ο οποίος είναι ο αντίστοιχος του σημερινού τελεστή
...$arr
από την PHP.
Ο τελεστής undefined-safe ??->
, ο οποίος είναι παρόμοιος με τον nullsafe
τελεστή ?->
, αλλά δεν δημιουργεί σφάλμα αν η μεταβλητή δεν
υπάρχει, δημιουργήθηκε για ιστορικούς λόγους και σήμερα συνιστούμε να
χρησιμοποιείτε τον τυπικό τελεστή της PHP ?->
.
Περιορισμοί της PHP στη Latte
Μόνο εκφράσεις PHP μπορούν να γραφτούν στο Latte. Δηλαδή, δεν μπορούν να
χρησιμοποιηθούν δηλώσεις που τελειώνουν με άνω τελεία. Δεν μπορείτε να
δηλώσετε κλάσεις ή να χρησιμοποιήσετε δομές ελέγχου, όπως if
,
foreach
, switch
, return
, try
, throw
και άλλες, αντί
των οποίων το Latte προσφέρει τις ετικέτες του.
Επίσης, δεν μπορείτε να χρησιμοποιήσετε χαρακτηριστικά, backticks ή κάποια από τις μαγικές σταθερές. Δεν μπορείτε
καν να χρησιμοποιήσετε τα unset
, echo
, include
, require
,
exit
, eval
, επειδή δεν είναι συναρτήσεις, αλλά ειδικές δομές
της γλώσσας PHP και συνεπώς δεν είναι εκφράσεις. Υποστηρίζονται μόνο
σχόλια πολλών γραμμών /* ... */
.
Ωστόσο, μπορείτε να παρακάμψετε αυτούς τους περιορισμούς
ενεργοποιώντας την επέκταση RawPhpExtension, η οποία σας επιτρέπει να
χρησιμοποιείτε οποιονδήποτε κώδικα PHP στην ετικέτα {php ...}
με
ευθύνη του συντάκτη του προτύπου.