HTML elemek
A Nette\Utils\Html osztály egy segédprogram a HTML kód generálásához, amely megakadályozza a Cross Site Scripting (XSS) sebezhetőséget.
Úgy működik, hogy az objektumai HTML elemeket reprezentálnak, paramétereiket beállítjuk, és hagyjuk őket renderelni:
Telepítés:
Minden példa feltételezi, hogy a következő osztály alias van definiálva:
HTML-elem létrehozása
Az elem létrehozása a Html::el()
módszerrel történik:
A HTML-szintaxisban a név mellett más attribútumokat is megadhat:
Vagy asszociatív tömbként adja át őket a második paraméterhez:
Egy elem nevének megváltoztatása és visszaadása:
HTML-attribútumok
Az egyes HTML-attribútumokat háromféleképpen állíthatod be és kaphatod meg, rajtad áll, hogy melyik tetszik jobban. Az első a tulajdonságokon keresztül:
A második mód a metódusok hívása, amelyeket a tulajdonságok beállításával ellentétben láncszerűen egymáshoz kapcsolhatunk:
A harmadik mód pedig a legbeszédesebb:
Tömegesen, az attribútumokat a addAttributes(array $attrs)
segítségével lehet beállítani, és a
removeAttributes(array $attrNames)
segítségével törölni.
Egy attribútum értékének nem kell csak egy karakterláncnak lennie, logikai attribútumokhoz logikai értékek is használhatók:
Egy attribútum lehet szóközökkel elválasztva felsorolt tokenek tömbje is, ami például CSS-osztályok esetében megfelelő:
Alternatív megoldás az asszociatív tömb, ahol az értékek megmondják, hogy a kulcsot fel kell-e sorolni:
A CSS-stílusok asszociatív tömbök formájában írhatók:
Most a tulajdonságokat használtuk, de ugyanezt megtehetjük a metódusok használatával is:
Vagy akár a legbeszédesebb módon:
Még egy utolsó dolog: a href()
módszer megkönnyítheti a lekérdezési paraméterek összeállítását egy
URL-ben:
Adatattribútumok
Az adatattribútumok speciális támogatással rendelkeznek. Mivel a nevük kötőjeleket tartalmaz, a tulajdonságokon és
metódusokon keresztüli hozzáférés nem olyan elegáns, ezért van egy módszer: data()
:
Ha az adatattribútum értéke egy tömb, akkor az automatikusan JSON-ba szerializálódik:
Elem tartalma
Az elem belső tartalmát a setHtml()
vagy a setText()
metódusok határozzák meg. Az elsőt csak
akkor használja, ha tudja, hogy megbízhatóan biztonságos HTML karakterláncot ad át a paraméterben.
Ezzel szemben a belső tartalmat a getHtml()
vagy a getText()
metódusokkal kapjuk meg. A második
eltávolítja a címkéket a HTML-kimenetből, és a HTML-elemeket karakterekké alakítja.
Gyermek csomópontok
Egy elem belső tartalma lehet a gyermekelemek tömbje is. Ezek mindegyike lehet egy-egy karakterlánc vagy egy másik
Html
elem. Ezek beillesztése a addHtml()
vagy a addText()
segítségével történik:
Egy másik módja egy új Html
csomópont létrehozásának és beszúrásának:
A csomópontokkal úgy dolgozhat, mintha tömbelemek lennének. Tehát az egyeseket szögletes zárójelek segítségével
érhetjük el, a count()
segítségével megszámolhatjuk őket, és iterálhatunk rajtuk:
Egy új csomópontot a insert(?int $index, $child, bool $replace = false)
segítségével lehet egy adott
pozícióba beilleszteni. Ha $replace = false
, akkor a $index
pozícióba illeszti be az elemet, a
többit pedig áthelyezi. Ha $index = null
, akkor egy elemet illeszt a végére.
Az összes csomópontot a getChildren()
metódus adja vissza, és a removeChildren()
metódus
távolítja el.
Dokumentumtöredék létrehozása
Ha csomópontok tömbjével akarsz dolgozni, és nem érdekel a csomagoló elem, létrehozhatsz egy úgynevezett
dokumentumtöredéket, ha az elem neve helyett a null
címet adod meg:
A fromHtml()
és a fromText()
metódusok gyorsabb módját kínálják a töredék
létrehozásának:
HTML kimenet generálása
A HTML-elemek generálásának legegyszerűbb módja a echo
használata, vagy egy objektumnak a
(string)
címre történő átvitele. A nyitó vagy záró címkéket és attribútumokat külön is ki lehet
nyomtatni:
Fontos funkció a Cross Site Scripting (XSS)
elleni automatikus védelem. Minden attribútumérték vagy a setText()
vagy a addText()
használatával
beillesztett tartalom megbízhatóan elkerüli az escapet:
Átalakítás HTML ↔ Szöveg
A htmlToText()
statikus módszerrel a HTML-t szöveggé alakíthatja:
HtmlStringable
A Nette\Utils\Html
objektum megvalósítja a Nette\HtmlStringable
interfészt, amelyet például a
Latte vagy az űrlapok használnak azon objektumok megkülönböztetésére, amelyek rendelkeznek egy olyan
__toString()
metódussal, amely HTML-kódot ad vissza. Így nem történik kettős eszkábálás, ha például a
sablonban az objektumot a {$el}
segítségével nyomtatjuk ki.