Latte címkék
Az összes beépített Latte-címke összefoglalása és leírása.
{$var} , {...} vagy {=...} |
nyomtat egy szkanderezett változót vagy kifejezést |
{$var|filter} |
nyomtatás szűrőkkel |
{l} vagy {r} |
kinyomtatja a { or } karaktert. |
{if} … {elseif} … {else} … {/if} |
condition if |
{ifset} … {elseifset} … {/ifset} |
feltétel ifset |
{ifchanged} … {/ifchanged} |
tesztelés, hogy történt-e változás |
{switch} {case} {default} {/switch} |
condition switch |
n:else |
alternatív tartalom a feltételekhez |
{foreach} … {/foreach} |
foreach |
{for} … {/for} |
for |
{while} … {/while} |
while |
{continueIf $cond} |
folytatás a következő iterációhoz |
{skipIf $cond} |
kihagyja az aktuális ciklus iterációját |
{breakIf $cond} |
a ciklus megszakítása |
{exitIf $cond} |
korai kilépés |
{first} … {/first} |
ez az első iteráció? |
{last} … {/last} |
ez az utolsó ismétlés? |
{sep} … {/sep} |
Következik a következő ismétlés? |
{iterateWhile} … {/iterateWhile} |
strukturált foreach |
$iterator |
speciális változó a foreach cikluson belül |
{include 'file.latte'} |
más fájlból származó sablont tartalmaz |
{sandbox 'file.latte'} |
sablon felvétele sandbox módban |
{block} |
névtelen blokk |
{block blockname} |
blokkdefiníció |
{define blockname} |
blokkdefiníció jövőbeli használatra |
{include blockname} |
nyomtatási blokk |
{include blockname from 'file.latte'} |
blokk nyomtatása fájlból |
{import 'file.latte'} |
blokkok betöltése egy másik sablonból |
{layout 'file.latte'} / {extends} |
elrendezési fájl megadása |
{embed} … {/embed} |
betölti a sablont vagy a blokkot, és lehetővé teszi a blokkok felülírását |
{ifset blockname} … {/ifset} |
feltétel, ha a blokk definiálva van |
{try} … {else} … {/try} |
kivételek kezelése |
{rollback} |
elveti a try blokkot |
{var $foo = value} |
változó létrehozása |
{default $foo = value} |
alapértelmezett érték, ha a változót nem deklarálták |
{parameters} |
változók deklarálása, alapértelmezett értékek beírása |
{capture} … {/capture} |
egy szakasz rögzítése egy változóhoz |
{varType} |
a változó típusának deklarálása |
{varPrint} |
Javasolja a változók típusait |
{templateType} |
a változók típusainak deklarálása osztály használatával |
{templatePrint} |
osztályt generál tulajdonságokkal |
{_string} |
lefordítva nyomtat |
{translate} … {/translate} |
lefordítja a tartalmat |
{contentType} |
átkapcsolja az escaping módot és elküldi a HTTP fejlécet |
{debugbreak} |
töréspontot állít a kódhoz |
{do} |
kiértékel egy kifejezést nyomtatás nélkül |
{dump} |
a változókat a Tracy Bar-ba dobja ki |
{php} |
bármilyen PHP kódot végrehajt |
{spaceless} … {/spaceless} |
eltávolítja a felesleges szóközöket |
{syntax} |
futás közben váltja a szintaxist |
{trace} |
megjeleníti a veremkövetést |
n:class |
smart class attribútum |
n:attr |
intelligens HTML attribútumok |
n:tag |
HTML elem dinamikus neve |
n:ifcontent |
Üres HTML tag elhagyása |
n:href |
hivatkozás a <a>
HTML-elemekben |
{link} |
linket nyomtat |
{plink} |
bemutatóra mutató link nyomtatása |
{control} |
komponens nyomtatása |
{snippet} … {/snippet} |
AJAX-szel küldhető sablonrészlet |
{snippetArea} |
snippet borítékolás |
{cache} … {/cache} |
egy sablonrészlet gyorsítótárba helyezése |
{form} … {/form} |
nyomtat egy űrlapelemet |
{label} … {/label} |
nyomtat egy űrlap beviteli címkét |
{input} |
nyomtat egy űrlap beviteli elemet |
{inputError} |
hibaüzenetet nyomtat az űrlap beviteli eleméhez |
n:name |
HTML beviteli elem aktiválása |
{formContainer} … {/formContainer} |
az űrlap tárolójának renderelése |
Nyomtatás
{$var}
{...}
{=...}
A Latte a {=...}
címkét használja bármely kifejezés kimeneti kiadására. Ha a kifejezés változóval vagy
függvényhívással kezdődik, nem szükséges egyenlőségjelet írni. Ami a gyakorlatban azt jelenti, hogy szinte soha nem kell
kiírni:
Bármit leírhatsz kifejezésként, amit a PHP-ból ismersz. Csak nem kell megtanulnod egy új nyelvet. Például:
Kérjük, ne keressenek értelmet az előző példában, de ha találnak benne, írják meg nekünk :-)
Kimenet menekülése
Mi a sablonrendszer legfontosabb feladata? A biztonsági rések elkerülése. És pontosan ezt teszi a Latte, amikor valamit a kimenetre nyomtat. Automatikusan mindent elrejt:
Pontosabban, a Latte kontextusfüggő eszkópálást használ, ami olyan fontos és egyedülálló funkció, hogy külön fejezetet szenteltünk neki.
És ha megbízható forrásból származó HTML-kódolt tartalmat nyomtat? Akkor egyszerűen kikapcsolhatja az escapinget:
A noescape
szűrő visszaélésszerű használata XSS sebezhetőséghez vezethet! Soha ne
használd, hacsak nem vagy teljesen biztos abban, hogy mit csinálsz, és hogy a nyomtatott karakterlánc megbízható
forrásból származik.
Nyomtatás JavaScriptben
A kontextusérzékeny escapingnek köszönhetően csodálatosan egyszerű a változók JavaScripten belüli nyomtatása, és a Latte megfelelően kikerüli őket.
A változónak nem kell sztringnek lennie, bármilyen adattípus támogatott, amit aztán JSON-ként kódol:
Generál:
Ez az oka annak is, hogy nem szabad a változót idézőjelbe tenni: Latte a karakterláncok köré teszi őket. Ha pedig egy stringváltozót egy másik stringbe akarsz tenni, egyszerűen kapcsold össze őket:
Szűrők
A nyomtatott kifejezés szűrőkkel módosítható. Ez a példa például a karakterláncot nagybetűvé alakítja, és legfeljebb 30 karakterre rövidíti:
A kifejezés részeire is alkalmazhat szűrőket az alábbiak szerint:
Feltételek
{if}
{elseif}
{else}
A feltételek ugyanúgy viselkednek, mint a PHP megfelelőik. Használhatja ugyanazokat a kifejezéseket, amelyeket a PHP-ból ismer, nem kell új nyelvet tanulnia.
Mint minden páros tag, a {if} ... {/ if}
párja is leírható például n:attribútumként:
Tudtad, hogy az n:attribútumokhoz hozzáadhatod a tag-
előtagot? Ekkor a feltétel csak a HTML-címkéket
érinti, és a köztük lévő tartalom mindig ki lesz nyomtatva:
Szép.
n:else
Ha a {if} ... {/if}
feltételt n:attribútum formájában írja, akkor
lehetősége van a n:else
segítségével egy alternatív ágat is megadni:
A n:else
attribútum a következővel együtt is használható n:ifset
, n:foreach
, n:try
, n:ifcontent
, és n:ifchanged
.
{/if $cond}
Meglepő lehet, hogy a {if}
feltételben szereplő kifejezést a végtagban is meg lehet adni. Ez olyan
helyzetekben hasznos, amikor a tag megnyitásakor még nem ismerjük a feltétel értékét. Nevezzük ezt halasztott
döntésnek.
Például elkezdünk listázni egy táblázatot rekordokkal az adatbázisból, és csak a jelentés befejezése után vesszük
észre, hogy nem volt rekord az adatbázisban. Ezért a {/if}
címke végére feltételt teszünk, és ha nincs
rekord, akkor egyik sem kerül kiírásra:
Praktikus, ugye?
A {else}
a halasztott feltételben is használható, de a {elseif}
nem.
{ifset}
{elseifset}
Lásd még {ifset block}
A {ifset $var}
feltétel segítségével meghatározhatja, hogy egy változó (vagy több változó) létezik-e,
és van-e nem null értékű értéke. Ez tulajdonképpen ugyanaz, mint a if (isset($var))
a PHP-ben. Mint minden
páros tag, ez is leírható n:attribútum formában, ezért mutassuk meg
példában:
{ifchanged}
{ifchanged}
ellenőrzi, hogy egy változó értéke megváltozott-e a ciklus (foreach, for vagy while) utolsó
iterációja óta.
Ha egy vagy több változót adunk meg a címkében, akkor ellenőrzi, hogy valamelyik változott-e, és ennek megfelelően kiírja a tartalmát. A következő példa például a nevek felsorolásakor minden egyes változáskor a név első betűjét írja ki címként:
Ha azonban nem adunk meg argumentumot, akkor maga a megjelenített tartalom kerül ellenőrzésre a korábbi állapothoz képest. Ez azt jelenti, hogy az előző példában nyugodtan elhagyhatjuk az argumentumot a címkében. És természetesen használhatjuk az n:attribute-ot is:
{else}
záradékot is beilleszthetünk a {ifchanged}
belsejébe.
{switch}
{case}
{default}
Összehasonlítja az értéket több opcióval. Ez hasonló a PHP-ből ismert switch
struktúrához. A Latte
azonban továbbfejleszti:
- szigorú összehasonlítást használ (
===
) - nem igényel
break
Tehát ez pontosan megegyezik a PHP 8.0-ban található match
struktúrával.
A {case}
záradék több, vesszővel elválasztott értéket is tartalmazhat:
Hurok
A Latte-ban a PHP-ból ismert ciklusok állnak rendelkezésedre: foreach, for és while.
{foreach}
A ciklust pontosan ugyanúgy írja meg, mint a PHP-ben:
Ezen kívül van néhány praktikus csípése, amiről most beszélni fogunk.
Például Latte ellenőrzi, hogy a létrehozott változók véletlenül se írják felül az azonos nevű globális
változókat. Ez megmenti Önt, amikor feltételezi, hogy a $lang
az oldal aktuális nyelve, és nem veszi észre,
hogy a foreach $langs as $lang
felülírta az adott változót.
A foreach ciklus is nagyon elegánsan és gazdaságosan írható meg az n:attribútummal:
Tudtad, hogy az n:attribútumokhoz a inner-
előtagot is be lehet illeszteni? Most akkor csak az elem belső
része fog ismétlődni a ciklusban:
Tehát valami ilyesmit ír ki:
{else}
A foreach
ciklushoz választható egy opcionális {else}
záradék, amelynek szövege akkor jelenik
meg, ha a megadott tömb üres:
$iterator
A foreach
cikluson belül a $iterator
változót inicializáljuk. Az aktuális ciklusra vonatkozó
fontos információkat tárolja.
$iterator->first
– ez az első iteráció?$iterator->last
– ez az utolsó iteráció?$iterator->counter
– iterációs számláló, 1-től kezdődik.$iterator->counter0
– iterációs számláló, 0-ról indul.$iterator->odd
– ez az iteráció páratlan?$iterator->even
– ez az iteráció páros?$iterator->parent
– az aktuális iterátort körülvevő iterátor.$iterator->nextValue
– a ciklus következő eleme$iterator->nextKey
– a ciklus következő elemének kulcsa.
A láta okos és a $iterator->last
nemcsak tömbök esetén működik, hanem akkor is, ha a ciklus egy
általános iterátoron fut át, ahol az elemek száma nem ismert előre.
{first}
{last}
{sep}
Ezek a címkék a {foreach}
cikluson belül használhatók. A {first}
tartalma az első menetben
kerül megjelenítésre. A {last}
tartalma renderelésre kerül … kitalálod? Igen, az utolsó lépésnél. Ezek
valójában a {if $iterator->first}
és a {if $iterator->last}
rövidítései.
A címkék n:attribútumként is leírhatók:
A {sep}
tartalma akkor kerül megjelenítésre, ha az iteráció nem az utolsó, így alkalmas olyan
elhatárolójelek, mint például a felsorolt elemek közötti vesszők kiírására:
Ez elég praktikus, nem igaz?
{iterateWhile}
Egyszerűsíti a lineáris adatok csoportosítását a foreach ciklusban történő iteráció során egy beágyazott ciklusban történő iterálással, amíg egy feltétel nem teljesül. Olvassa el a részletes utasításokat.
Elegánsan helyettesítheti a {first}
és a {last}
címet is a fenti példában:
Lásd még a kötegelt és csoportos szűrőket.
{for}
A ciklust pontosan ugyanúgy írjuk le, mint a PHP-ben:
A címkét n:attribútumként is írhatjuk:
{while}
A ciklust ismét pontosan ugyanúgy írjuk le, mint a PHP-ben:
Vagy n:attribútumként:
A végtagban lévő feltétellel rendelkező változat megfelel a do-while ciklusnak a PHP-ban:
{continueIf}
{skipIf}
{breakIf}
Vannak speciális címkék, amelyekkel bármely ciklus vezérlésére használhatod – {continueIf ?}
és
{breakIf ?}
, amelyek a feltételek teljesülése esetén a következő iterációra ugranak, illetve befejezik
a kört:
A {skipIf}
címke nagyon hasonlít a {continueIf}
címkéjéhez, de nem növeli a számlálót. Így
nem keletkeznek lyukak a számozásban, ha a $iterator->counter
kiírásával néhány elemet kihagyunk. A {else}
záradék is megjelenik, ha minden elemet kihagyunk.
{exitIf}
Befejezi egy sablon vagy blokk megjelenítését, ha egy feltétel teljesül (azaz „korai kilépés“).
Beleértve a sablonokat
{include 'file.latte'}
Lásd még {include block}
A {include}
címke betölti és megjeleníti a megadott sablont. Kedvenc PHP nyelvünkön ez így hangzik:
A bevont sablonok nem férnek hozzá az aktív kontextus változóihoz, de hozzáférnek a globális változókhoz.
A beillesztett sablonhoz a következő módon adhat át változókat:
A sablon neve bármilyen PHP-kifejezés lehet:
A beillesztett tartalom szűrőkkel módosítható. A következő példa eltávolít minden HTML-t és beállítja az esetet:
A sablon öröklés nem vesz részt ebben alapértelmezés szerint. Bár
blokkcímkéket adhat hozzá a bevont sablonokhoz, ezek nem fogják helyettesíteni a megfelelő blokkokat abban a sablonban,
amelybe bevonták őket. Gondoljon az inklúziókra úgy, mint az oldalak vagy modulok független és árnyékolt részeire. Ez a
viselkedés a with blocks
módosítóval módosítható:
A címkében megadott fájlnév és a lemezen lévő fájl közötti kapcsolat a betöltő függvénye.
{sandbox}
Ha egy végfelhasználó által létrehozott sablont vesz fel, fontolja meg a sandboxolást (további információ a sandbox dokumentációban):
{block}
Lásd még {block name}
A név nélküli blokkok arra szolgálnak, hogy szűrőket alkalmazhassunk a sablon egy részére. Például alkalmazhat egy csíkszűrőt a felesleges szóközök eltávolítására:
Kivételkezelés
{try}
Ez a címke rendkívül megkönnyíti a robusztus sablonok készítését.
Ha a {try}
blokk renderelése közben kivétel lép fel, az egész blokk elvetésre kerül, és a renderelés
utána folytatódik:
A {else}
opcionális záradék tartalma csak akkor kerül renderelésre, ha kivétel történik:
A címke n:attribútumként is írható:
Lehetőség van saját kivételkezelő definiálására is, pl. naplózáshoz:
{rollback}
A {try}
blokk manuálisan is megállítható és kihagyható a {rollback}
segítségével. Így nem
kell előre ellenőrizni az összes bemeneti adatot, és csak a renderelés során lehet eldönteni, hogy van-e értelme
renderelni az objektumot.
Változók
{var}
{default}
A sablonban új változókat hozunk létre a {var}
címkével:
A {default}
címke hasonlóan működik, azzal a különbséggel, hogy csak akkor hoz létre változókat, ha azok
nem léteznek. Ha egy változó már létezik, és tartalmazza a null
címet, azt nem írja felül:
A változók típusait is megadhatja. Ezek egyelőre tájékoztató jellegűek, és a Latte nem ellenőrzi őket.
{parameters}
Ahogyan egy függvény deklarálja a paramétereit, úgy egy sablon is deklarálhatja a változókat az elején:
A $a
és $b
változók alapértelmezett érték nélkül automatikusan a null
alapértelmezett értéket kapják. A deklarált típusok továbbra is tájékoztató jellegűek, és a Latte nem
ellenőrzi őket.
A deklarált változókon kívül más nem kerül át a sablonba. Ez egy különbség a {default}
címkéhez
képest.
{capture}
A {capture}
címke használatával a kimenetet egy változóba rögzítheti:
A címke n:attribútumként is írható, mint bármelyik páros címke:
A HTML kimenet a $var
változóban tárolódik Latte\Runtime\Html
objektumként, hogy elkerülje a nem kívánt escapinget nyomtatáskor.
Egyéb
{contentType}
A címkével megadhatja, hogy a sablon milyen típusú tartalmat képvisel. A lehetőségek a következők:
html
(alapértelmezett típus)xml
javascript
css
calendar
(iCal)text
Használata azért fontos, mert ez állítja be a kontextusfüggő
escapinget, és csak így tud a Latte helyesen menekülni. Például a {contentType xml}
XML módba kapcsol, a
{contentType text}
pedig teljesen kikapcsolja az escapinget.
Ha a paraméter egy teljes értékű MIME-típus, például application/xml
, akkor a Content-Type
HTTP fejlécet is elküldi a böngészőnek:
{debugbreak}
Megadja azt a helyet, ahol a kód végrehajtása megszakad. Hibakeresési célokra szolgál, hogy a programozó ellenőrizze a futási környezetet, és biztosítsa, hogy a kód az elvárásoknak megfelelően fut. Támogatja az Xdebugot. Ezenkívül megadható egy feltétel, amikor a kódnak meg kell törnie.
{do}
Végrehajtja a PHP-kódot, és nem ír ki semmit. A többi címkéhez hasonlóan a PHP-kód is egyetlen kifejezés, lásd a PHP korlátait.
{dump}
Egy változó vagy az aktuális kontextus kiürítése.
A Tracy csomagot igényli.
{php}
Lehetővé teszi bármilyen PHP kód futtatását. A címkét a RawPhpExtension kiterjesztés használatával kell aktiválni.
{spaceless}
Eltávolítja a felesleges szóközöket. Hasonló a szóköz nélküli szűrőhöz.
Kimenetek:
A címke n:attribútumként is írható:
{syntax}
A latte címkéket nem kell csak szimpla szögletes zárójelek közé zárni. Választhat más elválasztójelet is, akár
futás közben is. Erre szolgál a {syntax…}
, ahol a paraméter lehet:
- double:
{{...}}
- off: teljesen kikapcsolja a Latte címkéket
Az n:attribútum jelölés használatával csak egy JavaScript blokk esetében tilthatjuk le a Latte-et:
A Latte nagyon kényelmesen használható JavaScript-en belül, csak kerüljük az olyan konstrukciókat, mint ebben a
példában, ahol a betű közvetlenül a {
után következik, lásd: Latte JavaScripten vagy CSS-en belül.
Ha a {syntax off}
(azaz tag, nem az n:attribútum) segítségével kapcsolja ki a Latte-t, akkor szigorúan
figyelmen kívül hagyja az összes taget a {/syntax}
-ig.
{trace}
Dob egy Latte\RuntimeException
kivételt, amelynek stack trace-je a sablonok szellemében van. Így függvények
és metódusok hívása helyett blokkok hívását és sablonok beillesztését foglalja magában. Ha a dobott kivételek
egyértelmű megjelenítésére szolgáló eszközt, például a Tracy-t használja,
akkor jól láthatóvá válik a hívási verem, beleértve az összes átadott argumentumot is.
HTML-tag-segédprogramok
n:class
A n:class
segítségével nagyon könnyen létrehozható a class
HTML-attribútum pontosan a
kívánt módon.
Példa: Az aktív elemnek a active
osztállyal kell rendelkeznie:
Továbbá az első elemnek a first
és a main
osztályokkal kell rendelkeznie:
És minden elemnek a list-item
osztállyal kell rendelkeznie:
Elképesztően egyszerű, nem igaz?
n:attr
A n:attr
attribútum tetszőleges HTML-attribútumokat generálhat, ugyanolyan eleganciával, mint az n:class.
A visszaadott értékektől függően megjeleníti pl:
n:tag
A n:tag
attribútum dinamikusan megváltoztathatja egy HTML-elem nevét.
Ha a $heading === null
, a <h1>
címke változatlanul kiírásra kerül. Ellenkező esetben az
elem neve a változó értékére változik, így a $heading === 'h3'
esetében azt írja ki:
Mivel a Latte egy biztonságos templating rendszer, ellenőrzi, hogy az új tag neve érvényes-e, és nem tartalmaz-e nem kívánt vagy rosszindulatú értékeket.
n:ifcontent
Megakadályozza, hogy egy üres HTML-elem kiírásra kerüljön, azaz egy olyan elem, amely csak szóközöket tartalmaz.
A $error
változó értékeitől függően ez kiíródik:
Fordítás
Ahhoz, hogy a fordítási címkék működjenek, be kell állítania a fordítót. Használhatja a translate
szűrőt a fordításhoz.
{_...}
Lefordítja az értékeket más nyelvekre.
A fordítónak más paraméterek is átadhatók:
{translate}
Překládá části šablony:
attribútumként is írható, hogy lefordítsuk az elem belsejét: