HTML elemek
Az Nette\Utils\Html osztály egy segéd a HTML kód generálásához, amely nem engedi meg a Cross Site Scripting (XSS) sebezhetőség kialakulását.
Úgy működik, hogy objektumai HTML elemeket képviselnek, amelyeknek paramétereket állítunk be, és kirajzoltatjuk őket:
Telepítés:
Minden példa feltételezi a következő alias létrehozását:
HTML elem létrehozása
Elemet a Html::el()
metódussal hozunk létre:
A néven kívül megadhat más attribútumokat is HTML szintaxisban:
Vagy átadhatja őket asszociatív tömbként a második paraméterként:
Elem nevének megváltoztatása és visszaadása:
HTML attribútumok
Az egyes HTML attribútumokat három módon módosíthatjuk és olvashatjuk, Öntől függ, melyik tetszik jobban. Az első közülük a property-ken keresztül történik:
A második út a metódushívás, amelyek a property-k beállításával ellentétben láncolhatók:
A harmadik mód a legbőbeszédűbb:
Az attribútumokat tömegesen lehet beállítani az addAttributes(array $attrs)
segítségével, és
eltávolítani az removeAttributes(array $attrNames)
segítségével.
Az attribútum értéke nem csak string lehet, logikai értékeket is lehet használni logikai attribútumokhoz:
Az attribútum lehet értékek tömbje is, amelyek szóközökkel elválasztva íródnak ki, ami például CSS osztályokhoz hasznos:
Alternatíva az asszociatív tömb, ahol az értékek megmondják, hogy a kulcsot ki kell-e írni:
A CSS stílusokat asszociatív tömbök formájában lehet írni:
Most property-ket használtunk, de ugyanez leírható metódusokkal is:
Vagy akár a legbőbeszédűbb módon is:
Még egy apróság a végére: a href()
metódus megkönnyítheti a query paraméterek összeállítását az
URL-ben:
Data attribútumok
A data attribútumok speciális támogatást élveznek. Mivel nevük kötőjeleket tartalmaz, a property-ken és metódusokon
keresztüli hozzáférés nem olyan elegáns, ezért létezik a data()
metódus:
Ha a data attribútum értéke tömb, automatikusan JSON-ba szerializálódik:
Elem tartalma
Az elem belső tartalmát a setHtml()
vagy setText()
metódusokkal állítjuk be. Az elsőt csak
abban az esetben használja, ha tudja, hogy a paraméterben megbízhatóan biztonságos HTML stringet ad át.
És fordítva, a belső tartalmat a getHtml()
vagy getText()
metódusokkal kapjuk meg. A második
eltávolítja a HTML tageket a kimenetből, és a HTML entitásokat karakterekké konvertálja.
Gyermek csomópontok
Az elem belseje lehet gyermek (children) csomópontok tömbje is. Mindegyikük lehet string vagy egy másik Html
elem. Az addHtml()
vagy addText()
segítségével illesztjük be őket:
Egy másik mód új Html
csomópont létrehozására és beillesztésére:
A csomópontokkal ugyanúgy lehet dolgozni, mintha tömbről lenne szó. Azaz hozzáférni az egyes elemekhez szögletes
zárójelekkel, megszámolni őket a count()
segítségével, és iterálni rajtuk:
Új csomópontot lehet egy konkrét helyre beilleszteni az insert(?int $index, $child, bool $replace = false)
segítségével. Ha a $replace = false
, beilleszti az elemet az $index
pozícióra, és a többit
eltolja. Ha az $index = null
, hozzáadja az elemet a végére.
Az összes csomópontot a getChildren()
metódussal kapjuk meg, és eltávolítjuk őket a
removeChildren()
metódussal.
Document fragment létrehozása
Ha csomópontok tömbjével akarunk dolgozni, és nem érdekel minket a burkoló elem, létrehozhatunk egy ún. document
fragmentet null
átadásával az elem neve helyett:
Gyorsabb módot kínálnak a fragment létrehozására a fromHtml()
és fromText()
metódusok:
HTML kimenet generálása
A legegyszerűbb módja egy HTML elem kiírásának az echo
használata vagy az objektum
(string)
-gé típuskonvertálása. Külön is kiírhatók a nyitó vagy záró tagek és attribútumok:
Fontos jellemző az automatikus védelem a Cross
Site Scripting (XSS) ellen. Minden attribútumérték vagy a setText()
vagy addText()
keresztül
beillesztett tartalom megbízhatóan escapelve van:
HTML ↔ szöveg konverzió
HTML szöveggé alakításához használhatja a htmlToText()
statikus metódust:
HtmlStringable
A Nette\Utils\Html
objektum implementálja a Nette\HtmlStringable
interfészt, amellyel például a
Latte vagy az űrlapok megkülönböztetik azokat az objektumokat, amelyek rendelkeznek a __toString()
metódussal,
amely HTML kódot ad vissza. Így nem történik dupla escapelés, ha például az objektumot kiírjuk a sablonban a
{$el}
segítségével.