Tags του Latte
Επισκόπηση και περιγραφή όλων των tags του συστήματος προτύπων Latte, τα οποία είναι διαθέσιμα από προεπιλογή.
{$var} , {...} ή {=...} |
εκτυπώνει μια μεταβλητή ή έκφραση με διαφυγή |
{$var|filter} |
εκτυπώνει με χρήση φίλτρων |
{l} ή {r} |
εκτυπώνει τον χαρακτήρα { ή } |
{if} … {elseif} … {else} … {/if} |
συνθήκη if |
{ifset} … {elseifset} … {/ifset} |
συνθήκη ifset |
{ifchanged} … {/ifchanged} |
έλεγχος αν υπήρξε αλλαγή |
{switch} {case} {default} {/switch} |
συνθήκη switch |
n:else |
εναλλακτικό περιεχόμενο για συνθήκες |
{foreach} … {/foreach} |
foreach |
{for} … {/for} |
for |
{while} … {/while} |
while |
{continueIf $cond} |
συνέχεια στην επόμενη επανάληψη |
{skipIf $cond} |
παράλειψη επανάληψης |
{breakIf $cond} |
διακοπή βρόχου |
{exitIf $cond} |
πρόωρη λήξη |
{first} … {/first} |
είναι η πρώτη διέλευση; |
{last} … {/last} |
είναι η τελευταία διέλευση; |
{sep} … {/sep} |
θα ακολουθήσει άλλη διέλευση; |
{iterateWhile} … {/iterateWhile} |
δομημένος foreach |
$iterator |
ειδική μεταβλητή μέσα στο foreach |
{include 'file.latte'} |
φορτώνει ένα πρότυπο από άλλο αρχείο |
{sandbox 'file.latte'} |
φορτώνει ένα πρότυπο σε λειτουργία sandbox |
{block} |
ανώνυμο μπλοκ |
{block blockname} |
ορίζει ένα μπλοκ |
{define blockname} |
ορίζει ένα μπλοκ για μεταγενέστερη χρήση |
{include blockname} |
απόδοση μπλοκ |
{include blockname from 'file.latte'} |
αποδίδει ένα μπλοκ από ένα αρχείο |
{import 'file.latte'} |
φορτώνει μπλοκ από ένα πρότυπο |
{layout 'file.latte'} / {extends} |
καθορίζει το αρχείο με το layout |
{embed} … {/embed} |
φορτώνει ένα πρότυπο ή μπλοκ και επιτρέπει την αντικατάσταση μπλοκ |
{ifset blockname} … {/ifset} |
συνθήκη, εάν υπάρχει μπλοκ |
{try} … {else} … {/try} |
παγίδευση εξαιρέσεων |
{rollback} |
απόρριψη μπλοκ try |
{var $foo = value} |
δημιουργεί μια μεταβλητή |
{default $foo = value} |
δημιουργεί μια μεταβλητή, εάν δεν υπάρχει |
{parameters} |
δηλώνει μεταβλητές, τύπους και προεπιλεγμένες τιμές |
{capture} … {/capture} |
συλλαμβάνει ένα μπλοκ σε μια μεταβλητή |
{varType} |
δηλώνει τον τύπο μιας μεταβλητής |
{varPrint} |
προτείνει τύπους μεταβλητών |
{templateType} |
δηλώνει τύπους μεταβλητών σύμφωνα με μια κλάση |
{templatePrint} |
προτείνει μια κλάση με τύπους μεταβλητών |
{_...} |
εκτυπώνει τη μετάφραση |
{translate} … {/translate} |
μεταφράζει το περιεχόμενο |
{contentType} |
αλλάζει το escaping και στέλνει την κεφαλίδα HTTP |
{debugbreak} |
τοποθετεί ένα breakpoint στον κώδικα |
{do} |
εκτελεί κώδικα, αλλά δεν εκτυπώνει τίποτα |
{dump} |
κάνει dump μεταβλητών στο Tracy Bar |
{php} |
εκτελεί οποιονδήποτε κώδικα PHP |
{spaceless} … {/spaceless} |
αφαιρεί τα περιττά κενά |
{syntax} |
αλλαγή σύνταξης κατά το χρόνο εκτέλεσης |
{trace} |
εμφανίζει το stack trace |
n:class |
δυναμική γραφή του attribute class HTML |
n:attr |
δυναμική γραφή οποιωνδήποτε attributes HTML |
n:tag |
δυναμική γραφή του ονόματος του στοιχείου HTML |
n:ifcontent |
παραλείπει το κενό tag HTML |
n:href |
σύνδεσμος που
χρησιμοποιείται στα στοιχεία HTML <a> |
{link} |
εκτυπώνει έναν σύνδεσμο |
{plink} |
εκτυπώνει έναν σύνδεσμο προς έναν presenter |
{control} |
αποδίδει ένα component |
{snippet} … {/snippet} |
απόσπασμα που μπορεί να σταλεί με AJAX |
{snippetArea} |
περιτύλιγμα για αποσπάσματα |
{cache} … {/cache} |
κάνει cache ένα μέρος του προτύπου |
{form} … {/form} |
αποδίδει τα tags της φόρμας |
{label} … {/label} |
αποδίδει την ετικέτα ενός στοιχείου φόρμας |
{input} |
αποδίδει ένα στοιχείο φόρμας |
{inputError} |
εκτυπώνει το μήνυμα σφάλματος ενός στοιχείου φόρμας |
n:name |
ζωντανεύει ένα στοιχείο φόρμας |
{formContainer} … {/formContainer} |
απόδοση ενός container φόρμας |
Εκτύπωση
{$var}
{...}
{=...}
Στο Latte, χρησιμοποιείται το tag {=...}
για την εκτύπωση
οποιασδήποτε έκφρασης στην έξοδο. Το Latte ενδιαφέρεται για την άνεσή
σας, οπότε αν η έκφραση ξεκινά με μια μεταβλητή ή μια κλήση συνάρτησης,
δεν χρειάζεται να γράψετε το σύμβολο ίσον. Αυτό στην πράξη σημαίνει ότι
σχεδόν ποτέ δεν χρειάζεται να το γράψετε:
Ως έκφραση μπορείτε να γράψετε οτιδήποτε γνωρίζετε από την PHP. Δεν χρειάζεται λοιπόν να μάθετε μια νέα γλώσσα. Έτσι, για παράδειγμα:
Παρακαλώ, μην ψάχνετε για νόημα στο προηγούμενο παράδειγμα, αλλά αν βρείτε κάποιο, γράψτε μας :-)
Escaping εξόδου
Ποιο είναι το πιο σημαντικό καθήκον ενός συστήματος προτύπων; Να αποτρέπει τα κενά ασφαλείας. Και ακριβώς αυτό κάνει το Latte πάντα, όταν εκτυπώνετε κάτι. Το κάνει escape αυτόματα:
Για να είμαστε ακριβείς, το Latte χρησιμοποιεί context-aware escaping, το οποίο είναι τόσο σημαντικό και μοναδικό πράγμα, που του αφιερώσαμε ξεχωριστό κεφάλαιο.
Και τι γίνεται αν εκτυπώνετε περιεχόμενο κωδικοποιημένο σε HTML από αξιόπιστη πηγή; Τότε μπορείτε εύκολα να απενεργοποιήσετε το escaping:
Η λανθασμένη χρήση του φίλτρου noescape
μπορεί να
οδηγήσει σε ευπάθεια XSS! Ποτέ μην το χρησιμοποιείτε αν δεν είστε
απολύτως σίγουροι για το τι κάνετε και ότι το string που εκτυπώνεται
προέρχεται από αξιόπιστη πηγή.
Εκτύπωση σε JavaScript
Χάρη στο context-aware escaping, είναι εκπληκτικά εύκολο να εκτυπώνετε μεταβλητές μέσα σε JavaScript και το σωστό escaping το αναλαμβάνει το Latte.
Η μεταβλητή δεν χρειάζεται να είναι μόνο string, υποστηρίζεται οποιοσδήποτε τύπος δεδομένων, ο οποίος στη συνέχεια κωδικοποιείται ως JSON:
Δημιουργεί:
Αυτός είναι επίσης ο λόγος για τον οποίο δεν γράφονται εισαγωγικά γύρω από τη μεταβλητή: το Latte τα προσθέτει αυτόματα για τα strings. Και αν θέλετε να εισάγετε μια μεταβλητή string σε ένα άλλο string, απλά συνδέστε τα:
Φίλτρα
Η εκτυπωμένη έκφραση μπορεί να τροποποιηθεί με φίλτρα. Έτσι, για παράδειγμα, μετατρέπουμε ένα string σε κεφαλαία γράμματα και το περικόπτουμε σε μέγιστο 30 χαρακτήρες:
Μπορείτε να χρησιμοποιείτε φίλτρα και σε επιμέρους τμήματα της έκφρασης με αυτόν τον τρόπο:
Συνθήκες
{if}
{elseif}
{else}
Οι συνθήκες συμπεριφέρονται ακριβώς όπως οι αντίστοιχές τους στην PHP. Μπορείτε να χρησιμοποιείτε σε αυτές και τις ίδιες εκφράσεις που γνωρίζετε από την PHP, δεν χρειάζεται να μάθετε μια νέα γλώσσα.
Όπως κάθε ζευγαρωτό tag, έτσι και το ζεύγος {if} ... {/if}
μπορεί να
γραφτεί και με τη μορφή n:attribute, για παράδειγμα:
Γνωρίζετε ότι στα n:attributes μπορείτε να προσθέσετε το πρόθεμα tag-
;
Τότε η συνθήκη θα ισχύει μόνο για την εκτύπωση των HTML tags και το
περιεχόμενο μεταξύ τους θα εκτυπώνεται πάντα:
Θεϊκό.
n:else
Εάν γράψετε τη συνθήκη {if} ... {/if}
με τη μορφή n:attribute, έχετε τη δυνατότητα να δηλώσετε και έναν
εναλλακτικό κλάδο χρησιμοποιώντας το n:else
:
Το attribute n:else
μπορεί επίσης να χρησιμοποιηθεί σε ζεύγος με τα n:ifset
, n:foreach
, n:try
, n:ifcontent
και n:ifchanged
.
{/if $cond}
Ίσως σας εκπλήξει το γεγονός ότι η έκφραση στη συνθήκη {if}
μπορεί να δηλωθεί και στο tag τερματισμού. Αυτό είναι χρήσιμο σε
καταστάσεις όπου κατά το άνοιγμα της συνθήκης δεν γνωρίζουμε ακόμα την
τιμή της. Ας το ονομάσουμε αναβαλλόμενη απόφαση.
Για παράδειγμα, αρχίζουμε να εκτυπώνουμε έναν πίνακα με εγγραφές από
μια βάση δεδομένων και μόνο μετά την ολοκλήρωση της εκτύπωσης
συνειδητοποιούμε ότι δεν υπήρχε καμία εγγραφή στη βάση δεδομένων.
Έτσι, βάζουμε μια συνθήκη για αυτό στο tag τερματισμού {/if}
και αν
δεν υπάρχει καμία εγγραφή, τίποτα από αυτά δεν θα εκτυπωθεί:
Έξυπνο, έτσι δεν είναι;
Στην αναβαλλόμενη συνθήκη μπορεί να χρησιμοποιηθεί και το
{else}
, αλλά όχι το {elseif}
.
{ifset}
{elseifset}
Δείτε επίσης {ifset block}
Με τη συνθήκη {ifset $var}
ελέγχουμε αν η μεταβλητή (ή περισσότερες
μεταβλητές) υπάρχει και έχει τιμή διαφορετική από null. Στην
πραγματικότητα, είναι το ίδιο με το if (isset($var))
στην PHP. Όπως κάθε
ζευγαρωτό tag, μπορεί να γραφτεί και με τη μορφή n:attribute, οπότε ας το δείξουμε ως παράδειγμα:
{ifchanged}
Το {ifchanged}
ελέγχει αν η τιμή μιας μεταβλητής έχει αλλάξει από
την τελευταία επανάληψη σε έναν βρόχο (foreach, for ή while).
Αν δηλώσουμε μία ή περισσότερες μεταβλητές στο tag, θα ελέγχει αν κάποια από αυτές έχει αλλάξει και ανάλογα θα εκτυπώσει το περιεχόμενο. Για παράδειγμα, το ακόλουθο παράδειγμα εκτυπώνει το πρώτο γράμμα του ονόματος ως επικεφαλίδα κάθε φορά που αλλάζει κατά την εκτύπωση των ονομάτων:
Ωστόσο, αν δεν δηλώσουμε κανένα όρισμα, θα ελέγχεται το αποδοθέν περιεχόμενο σε σχέση με την προηγούμενη κατάστασή του. Αυτό σημαίνει ότι στο προηγούμενο παράδειγμα, μπορούμε απλά να παραλείψουμε το όρισμα στο tag. Και φυσικά, μπορούμε επίσης να χρησιμοποιήσουμε το n:attribute:
Μέσα στο {ifchanged}
μπορεί επίσης να δηλωθεί η ρήτρα {else}
.
{switch}
{case}
{default}
Συγκρίνει μια τιμή με πολλαπλές επιλογές. Πρόκειται για ανάλογο της
εντολής switch
που γνωρίζετε από την PHP. Ωστόσο, το Latte το
βελτιώνει:
- χρησιμοποιεί αυστηρή σύγκριση (
===
) - δεν χρειάζεται
break
Είναι δηλαδή το ακριβές ισοδύναμο της δομής match
με την οποία
έρχεται η PHP 8.0.
Η ρήτρα {case}
μπορεί να περιέχει πολλαπλές τιμές χωρισμένες με
κόμματα:
Βρόχοι
Στο Latte θα βρείτε όλους τους βρόχους που γνωρίζετε από την PHP: foreach, for και while.
{foreach}
Γράφουμε τον βρόχο ακριβώς όπως στην PHP:
Επιπλέον, έχει μερικές έξυπνες δυνατότητες για τις οποίες θα μιλήσουμε τώρα.
Το Latte, για παράδειγμα, ελέγχει αν οι δημιουργημένες μεταβλητές
αντικαθιστούν κατά λάθος καθολικές μεταβλητές με το ίδιο όνομα. Αυτό
σώζει καταστάσεις όπου υπολογίζετε ότι στο $lang
βρίσκεται η
τρέχουσα γλώσσα της σελίδας και δεν συνειδητοποιείτε ότι το
foreach $langs as $lang
σας αντικατέστησε αυτή τη μεταβλητή.
Ο βρόχος foreach μπορεί επίσης να γραφτεί πολύ κομψά και σύντομα χρησιμοποιώντας το n:attribute:
Γνωρίζετε ότι στα n:attributes μπορείτε να προσθέσετε το πρόθεμα
inner-
; Τότε θα επαναλαμβάνεται στον βρόχο μόνο το εσωτερικό του
στοιχείου:
Έτσι, θα εκτυπωθεί κάτι σαν:
{else}
Μέσα στον βρόχο foreach
μπορεί να δηλωθεί η ρήτρα {else}
, το
περιεχόμενο της οποίας εμφανίζεται εάν ο βρόχος είναι κενός:
$iterator
Μέσα στον βρόχο foreach
, το Latte δημιουργεί τη μεταβλητή
$iterator
, με την οποία μπορούμε να λαμβάνουμε χρήσιμες πληροφορίες
για τον τρέχοντα βρόχο:
$iterator->first
– είναι η πρώτη φορά που διασχίζεται ο βρόχος;$iterator->last
– είναι η τελευταία διέλευση;$iterator->counter
– πόση είναι η διέλευση μετρώντας από το ένα;$iterator->counter0
– πόση είναι η διέλευση μετρώντας από το μηδέν;$iterator->odd
– είναι μονή διέλευση;$iterator->even
– είναι ζυγή διέλευση;$iterator->parent
– ο iterator που περιβάλλει τον τρέχοντα$iterator->nextValue
– το επόμενο στοιχείο στον βρόχο$iterator->nextKey
– το κλειδί του επόμενου στοιχείου στον βρόχο
Το Latte είναι έξυπνο και το $iterator->last
λειτουργεί όχι μόνο για
πίνακες, αλλά και όταν ο βρόχος διατρέχει έναν γενικό iterator, όπου ο
αριθμός των στοιχείων δεν είναι γνωστός εκ των προτέρων.
{first}
{last}
{sep}
Αυτά τα tags μπορούν να χρησιμοποιηθούν μέσα στον βρόχο {foreach}
. Το
περιεχόμενο του {first}
αποδίδεται αν είναι η πρώτη διέλευση. Το
περιεχόμενο του {last}
αποδίδεται… μπορείτε να μαντέψετε; Ναι, αν
είναι η τελευταία διέλευση. Πρόκειται στην πραγματικότητα για
συντομογραφίες των {if $iterator->first}
και {if $iterator->last}
.
Τα tags μπορούν επίσης να χρησιμοποιηθούν κομψά ως n:attribute:
Το περιεχόμενο του tag {sep}
αποδίδεται αν η διέλευση δεν είναι η
τελευταία, είναι λοιπόν χρήσιμο για την απόδοση διαχωριστικών, για
παράδειγμα, κομμάτων μεταξύ των εκτυπωμένων στοιχείων:
Αυτό είναι αρκετά πρακτικό, έτσι δεν είναι;
{iterateWhile}
Απλοποιεί την ομαδοποίηση γραμμικών δεδομένων κατά την επανάληψη σε έναν βρόχο foreach, εκτελώντας την επανάληψη σε έναν ένθετο βρόχο, εφόσον η συνθήκη είναι αληθής. Διαβάστε τον αναλυτικό οδηγό.
Μπορεί επίσης να αντικαταστήσει κομψά τα {first}
και {last}
στο παραπάνω παράδειγμα:
Δείτε επίσης τα φίλτρα batch και group.
{for}
Γράφουμε τον βρόχο ακριβώς όπως στην PHP:
Το tag μπορεί επίσης να χρησιμοποιηθεί ως n:attribute:
{while}
Γράφουμε ξανά τον βρόχο ακριβώς όπως στην PHP:
Ή ως n:attribute:
Είναι επίσης δυνατή μια παραλλαγή με συνθήκη στο tag τερματισμού, η οποία αντιστοιχεί στον βρόχο do-while στην PHP:
{continueIf}
{skipIf}
{breakIf}
Για τον έλεγχο οποιουδήποτε βρόχου μπορούν να χρησιμοποιηθούν τα tags
{continueIf ?}
και {breakIf ?}
, τα οποία μεταβαίνουν στο επόμενο
στοιχείο ή τερματίζουν τον βρόχο αντίστοιχα, όταν πληρούται η
συνθήκη:
Το tag {skipIf}
είναι πολύ παρόμοιο με το {continueIf}
, αλλά δεν
αυξάνει τον μετρητή $iterator->counter
, οπότε αν τον εκτυπώνουμε και
ταυτόχρονα παραλείπουμε ορισμένα στοιχεία, δεν θα υπάρχουν κενά στην
αρίθμηση. Επίσης, η ρήτρα {else}
αποδίδεται όταν παραλείπουμε όλα
τα στοιχεία.
{exitIf}
Τερματίζει την απόδοση του προτύπου ή του μπλοκ όταν πληρούται η συνθήκη (το λεγόμενο „early exit“).
Εισαγωγή template
{include 'file.latte'}
Δείτε επίσης {include block}
Το tag {include}
φορτώνει και αποδίδει το καθορισμένο πρότυπο. Αν
μιλούσαμε στη γλώσσα της αγαπημένης μας PHP, είναι κάτι σαν:
Τα ενσωματωμένα πρότυπα δεν έχουν πρόσβαση στις μεταβλητές του ενεργού context, έχουν πρόσβαση μόνο στις καθολικές μεταβλητές.
Μπορείτε να περάσετε μεταβλητές στο ενσωματωμένο πρότυπο με αυτόν τον τρόπο:
Το όνομα του προτύπου μπορεί να είναι οποιαδήποτε έκφραση PHP:
Το ενσωματωμένο περιεχόμενο μπορεί να τροποποιηθεί με φίλτρα. Το ακόλουθο παράδειγμα αφαιρεί όλο το HTML και προσαρμόζει το μέγεθος των γραμμάτων:
Από προεπιλογή, η κληρονομικότητα προτύπων δεν
παίζει κανένα ρόλο σε αυτή την περίπτωση. Παρόλο που μπορούμε να
χρησιμοποιούμε μπλοκ στο ενσωματωμένο πρότυπο, δεν αντικαθίστανται τα
αντίστοιχα μπλοκ στο πρότυπο στο οποίο ενσωματώνεται. Σκεφτείτε τα
ενσωματωμένα πρότυπα ως ξεχωριστά, απομονωμένα τμήματα σελίδων ή modules.
Αυτή η συμπεριφορά μπορεί να αλλάξει χρησιμοποιώντας τον τροποποιητή
with blocks
:
Η σχέση μεταξύ του ονόματος αρχείου που αναφέρεται στο tag και του αρχείου στο δίσκο είναι θέμα του loader.
{sandbox}
Κατά την ενσωμάτωση ενός προτύπου που δημιουργήθηκε από τον τελικό χρήστη, θα πρέπει να εξετάσετε τη λειτουργία sandbox (περισσότερες πληροφορίες στην τεκμηρίωση του sandbox):
{block}
Δείτε επίσης {block name}
Τα μπλοκ χωρίς όνομα χρησιμεύουν ως τρόπος εφαρμογής φίλτρων σε ένα μέρος του προτύπου. Για παράδειγμα, έτσι μπορεί να εφαρμοστεί το φίλτρο strip, το οποίο αφαιρεί τα περιττά κενά:
Διαχείριση εξαιρέσεων
{try}
Χάρη σε αυτό το tag, είναι εξαιρετικά εύκολο να δημιουργείτε ανθεκτικά πρότυπα.
Εάν κατά την απόδοση του μπλοκ {try}
προκύψει μια εξαίρεση,
ολόκληρο το μπλοκ απορρίπτεται και η απόδοση συνεχίζεται μετά
από αυτό:
Το περιεχόμενο στην προαιρετική ρήτρα {else}
αποδίδεται μόνο
όταν προκύψει εξαίρεση:
Το tag μπορεί επίσης να χρησιμοποιηθεί ως n:attribute:
Είναι επίσης δυνατό να ορίσετε έναν προσαρμοσμένο χειριστή εξαιρέσεων, για παράδειγμα, για καταγραφή.
{rollback}
Το μπλοκ {try}
μπορεί επίσης να διακοπεί και να παραλειφθεί
χειροκίνητα χρησιμοποιώντας το {rollback}
. Χάρη σε αυτό, δεν
χρειάζεται να ελέγχετε εκ των προτέρων όλα τα δεδομένα εισόδου και
μπορείτε να αποφασίσετε κατά τη διάρκεια της απόδοσης ότι δεν θέλετε
καθόλου να αποδώσετε το αντικείμενο:
Μεταβλητές
{var}
{default}
Δημιουργούμε νέες μεταβλητές στο template με το tag {var}
:
Το tag {default}
λειτουργεί παρόμοια, αλλά δημιουργεί μεταβλητές
μόνο εάν δεν υπάρχουν. Εάν η μεταβλητή υπάρχει ήδη και περιέχει την
τιμή null
, δεν θα αντικατασταθεί:
Μπορείτε επίσης να δηλώσετε τύπους μεταβλητών. Προς το παρόν είναι πληροφοριακοί και το Latte δεν τους ελέγχει.
{parameters}
Όπως μια συνάρτηση δηλώνει τις παραμέτρους της, έτσι και ένα πρότυπο μπορεί στην αρχή να δηλώσει τις μεταβλητές του:
Οι μεταβλητές $a
και $b
χωρίς δηλωμένη προεπιλεγμένη
τιμή έχουν αυτόματα την προεπιλεγμένη τιμή null
. Οι δηλωμένοι
τύποι είναι προς το παρόν πληροφοριακοί και το Latte δεν τους ελέγχει.
Άλλες μεταβλητές εκτός από τις δηλωμένες δεν μεταφέρονται στο
πρότυπο. Αυτό τις διαφοροποιεί από το tag {default}
.
{capture}
Συλλαμβάνει την έξοδο σε μια μεταβλητή:
Το tag μπορεί, όπως κάθε ζευγαρωτό tag, να γραφτεί και ως n:attribute:
Η έξοδος HTML αποθηκεύεται στη μεταβλητή $var
με τη μορφή του
αντικειμένου Latte\Runtime\Html
, ώστε να μην γίνει ανεπιθύμητο escaping κατά την
εκτύπωση.
Άλλα
{contentType}
Με αυτό το tag καθορίζετε τι τύπο περιεχομένου αντιπροσωπεύει το πρότυπο. Οι επιλογές είναι:
html
(προεπιλεγμένος τύπος)xml
javascript
css
calendar
(iCal)text
Η χρήση του είναι σημαντική, επειδή ορίζει το context-aware escaping και μόνο έτσι μπορεί να
κάνει σωστά escape. Για παράδειγμα, το {contentType xml}
αλλάζει σε
λειτουργία XML, το {contentType text}
απενεργοποιεί εντελώς το escaping.
Εάν η παράμετρος είναι ένας πλήρης τύπος MIME, όπως για παράδειγμα
application/xml
, τότε επιπλέον στέλνει την κεφαλίδα HTTP Content-Type
στον browser:
{debugbreak}
Υποδεικνύει το σημείο όπου η εκτέλεση του προγράμματος θα διακοπεί και θα εκκινηθεί ο debugger, ώστε ο προγραμματιστής να μπορεί να επιθεωρήσει το περιβάλλον εκτέλεσης και να διαπιστώσει αν το πρόγραμμα λειτουργεί όπως αναμένεται. Υποστηρίζει το Xdebug. Μπορεί να προστεθεί μια συνθήκη που καθορίζει πότε πρέπει να διακοπεί το πρόγραμμα.
{do}
Εκτελεί κώδικα PHP και δεν εκτυπώνει τίποτα. Όπως και με όλα τα άλλα tags, ο κώδικας PHP νοείται ως μία έκφραση, δείτε περιορισμοί PHP.
{dump}
Κάνει dump μια μεταβλητή ή το τρέχον context.
Απαιτεί τη βιβλιοθήκη Tracy.
{php}
Επιτρέπει την εκτέλεση οποιουδήποτε κώδικα PHP. Το tag πρέπει να ενεργοποιηθεί με την επέκταση RawPhpExtension.
{spaceless}
Αφαιρεί το περιττό λευκό διάστημα από την έξοδο. Λειτουργεί παρόμοια με το φίλτρο spaceless.
Δημιουργεί
Το tag μπορεί επίσης να γραφτεί ως n:attribute.
{syntax}
Τα tags του Latte δεν χρειάζεται να περικλείονται μόνο σε απλές αγκύλες.
Μπορούμε να επιλέξουμε και άλλο οριοθέτη, ακόμη και κατά το χρόνο
εκτέλεσης. Για αυτό χρησιμεύει το {syntax …}
, όπου ως παράμετρος
μπορεί να δηλωθεί:
- double:
{{...}}
- off: απενεργοποιεί εντελώς την επεξεργασία των tags του Latte
Με τη χρήση n:attributes, μπορείτε να απενεργοποιήσετε το Latte για παράδειγμα μόνο για ένα μπλοκ JavaScript:
Το Latte μπορεί να χρησιμοποιηθεί πολύ άνετα και μέσα σε JavaScript, αρκεί να
αποφεύγετε κατασκευές όπως σε αυτό το παράδειγμα, όπου ένα γράμμα
ακολουθεί αμέσως μετά το {
, δείτε Latte μέσα σε JavaScript ή CSS.
Εάν απενεργοποιήσετε το Latte χρησιμοποιώντας το {syntax off}
(δηλαδή
με το tag, όχι με το n:attribute), θα αγνοεί αυστηρά όλα τα tags μέχρι
το {/syntax}
{trace}
Προκαλεί μια εξαίρεση Latte\RuntimeException
, της οποίας το stack trace
ακολουθεί το πνεύμα των προτύπων. Δηλαδή, αντί για κλήσεις συναρτήσεων
και μεθόδων, περιέχει κλήσεις μπλοκ και ενσωματώσεις προτύπων. Εάν
χρησιμοποιείτε ένα εργαλείο για σαφή εμφάνιση των εξαιρέσεων που
προκλήθηκαν, όπως για παράδειγμα το Tracy, θα δείτε
με σαφήνεια το call stack, συμπεριλαμβανομένων όλων των παραμέτρων που
πέρασαν.
Βοηθοί κωδικοποιητή HTML
n:class
Χάρη στο n:class
, μπορείτε πολύ εύκολα να δημιουργήσετε το HTML
attribute class
ακριβώς όπως το φαντάζεστε.
Παράδειγμα: χρειάζομαι το ενεργό στοιχείο να έχει την κλάση
active
:
Και επιπλέον, το πρώτο στοιχείο να έχει τις κλάσεις first
και
main
:
Και όλα τα στοιχεία να έχουν την κλάση list-item
:
Εκπληκτικά απλό, έτσι δεν είναι;
n:attr
Το attribute n:attr
μπορεί με την ίδια κομψότητα που έχει το n:class να δημιουργεί οποιαδήποτε HTML attributes.
Ανάλογα με τις επιστρεφόμενες τιμές, εκτυπώνει π.χ.:
n:tag
Το attribute n:tag
μπορεί να αλλάξει δυναμικά το όνομα ενός
στοιχείου HTML.
Εάν το $heading === null
, εκτυπώνεται χωρίς αλλαγή το tag <h1>
.
Διαφορετικά, αλλάζει το όνομα του στοιχείου στην τιμή της μεταβλητής,
οπότε για $heading === 'h3'
εκτυπώνεται:
Επειδή το Latte είναι ένα ασφαλές σύστημα προτύπων, ελέγχει αν το νέο όνομα του tag είναι έγκυρο και δεν περιέχει ανεπιθύμητες ή κακόβουλες τιμές.
n:ifcontent
Αποτρέπει την εκτύπωση ενός κενού στοιχείου HTML, δηλαδή ενός στοιχείου που δεν περιέχει τίποτα άλλο εκτός από κενά.
Εκτυπώνει ανάλογα με την τιμή της μεταβλητής $error
:
Μεταφράσεις
Για να λειτουργούν τα tags μετάφρασης, πρέπει να ενεργοποιήσετε τον μεταφραστή. Για μετάφραση
μπορείτε επίσης να χρησιμοποιήσετε το φίλτρο translate
.
{_...}
Μεταφράζει τιμές σε άλλες γλώσσες.
Μπορείτε επίσης να περάσετε επιπλέον παραμέτρους στον μεταφραστή:
{translate}
Μεταφράζει τμήματα του προτύπου:
Το tag μπορεί επίσης να γραφτεί ως n:attribute, για μετάφραση του εσωτερικού του στοιχείου: