Elemente HTML
Clasa Nette\Utils\Html este un ajutor pentru generarea de cod HTML care previne vulnerabilitatea Cross Site Scripting (XSS).
Funcționează în așa fel încât obiectele sale reprezintă elemente HTML, le setăm parametrii și le lăsăm să se redea:
Instalare:
Toate exemplele presupun că este definit următorul alias de clasă:
Crearea unui element HTML
Elementul este creat folosind metoda Html::el()
:
În plus față de nume, puteți introduce și alte atribute în sintaxa HTML:
Sau treceți-le ca o matrice asociativă la al doilea parametru:
Pentru a modifica și a returna un nume de element:
Atribute HTML
Puteți seta și obține atribute HTML individuale în trei moduri, depinde de dumneavoastră care vă place mai mult. Primul este prin intermediul proprietăților:
Al doilea mod este de a apela metode care, spre deosebire de setarea proprietăților, putem să le înlănțuim:
Iar al treilea mod este cel mai vorbăreț:
În bloc, atributele pot fi setate cu addAttributes(array $attrs)
și șterse cu
removeAttributes(array $attrNames)
.
Valoarea unui atribut nu trebuie să fie neapărat un șir de caractere, ci se pot utiliza și valori logice pentru atributele logice:
Un atribut poate fi, de asemenea, o matrice de simboluri, care sunt listate separate prin spații, ceea ce este potrivit pentru clasele CSS, de exemplu:
O alternativă este un tablou asociativ, în care valorile indică dacă cheia trebuie să fie listată sau nu:
Stilurile CSS pot fi scrise sub formă de tablouri asociative:
Am folosit acum proprietățile, dar același lucru se poate face și cu ajutorul metodelor:
Sau chiar în cel mai vorbăreț mod:
Un ultim lucru: metoda href()
poate facilita compunerea parametrilor de interogare într-un URL:
Atribute de date
Atributele de date au un suport special. Deoarece numele lor conțin cratime, accesul prin intermediul proprietăților și
metodelor nu este atât de elegant, așa că există o metodă data()
:
Dacă valoarea atributului de date este o matrice, aceasta este serializată automat în JSON:
Conținutul elementului
Conținutul interior al elementului este stabilit prin metodele setHtml()
sau setText()
. Folosiți
prima metodă numai dacă știți că transmiteți în mod fiabil un șir HTML securizat în parametru.
Dimpotrivă, conținutul interior este obținut prin metodele getHtml()
sau getText()
. Cea de-a doua
elimină etichetele din ieșirea HTML și convertește entitățile HTML în caractere.
Noduri copil
Conținutul interior al unui element poate fi, de asemenea, o matrice de copii. Fiecare dintre ei poate fi fie un șir de
caractere, fie un alt element Html
. Aceștia sunt introduși cu ajutorul addHtml()
sau
addText()
:
O altă modalitate de a crea și insera un nou nod Html
:
Puteți lucra cu nodurile ca și cum ar fi elemente de matrice. Deci, accesați-le pe cele individuale folosind paranteze
pătrate, numărați-le cu count()
și iterați peste ele:
Un nou nod poate fi inserat într-o anumită poziție folosind
insert(?int $index, $child, bool $replace = false)
. Dacă $replace = false
, se inserează elementul la
poziția $index
și se mută celelalte. În cazul în care $index = null
, se adaugă un element la
sfârșit.
Toate nodurile sunt returnate prin metoda getChildren()
și eliminate prin metoda
removeChildren()
.
Crearea unui fragment de document
Dacă doriți să lucrați cu o matrice de noduri și nu vă interesează elementul de înfășurare, puteți crea un
așa-numit fragment de document, trecând null
în locul numelui elementului:
Metodele fromHtml()
și fromText()
oferă o modalitate mai rapidă de a crea un fragment:
Generarea de ieșire HTML
Cel mai simplu mod de a genera un element HTML este de a utiliza echo
sau de a transforma un obiect în
(string)
. De asemenea, puteți imprima separat etichetele și atributele de deschidere sau de închidere:
O caracteristică importantă este protecția automată împotriva Cross Site Scripting (XSS). Toate valorile atributului
sau conținutul inserat folosind setText()
sau addText()
sunt scăpate în mod fiabil:
Conversie HTML ↔ Text
Puteți utiliza metoda statică htmlToText()
pentru a converti HTML în text:
HtmlStringable
Obiectul Nette\Utils\Html
implementează interfața Nette\HtmlStringable
, pe care, de exemplu, Latte
sau formularele o folosesc pentru a distinge obiectele care au o metodă __toString()
care returnează codul HTML.
Astfel, scăparea dublă nu apare dacă, de exemplu, imprimăm obiectul din șablon folosind {$el}
.