Înțelegerea clasei Walker

Elementele de meniu, paginile și taxonomiile (ierarhice) sunt toate exemplele de date cu o structură arborescentă: termenii pot avea părinți, copii și frați. De obicei, am dori să reflectăm această structură în marcajul HTML. Pentru a afișa un meniu, de exemplu, dorim ca HTML să fie o listă a legăturilor "de nivel superior", cu liste imbricate ale copiilor lor, care conțin ele însele listele imorale ale copiilor lor și așa mai departe. Acest tutorial vă va ghida printr-o clasă pe care WordPress o oferă, ceea ce face ca această marcă să fie extrem de simplă.


Ce este clasa Walker??

Clasa Walker este o clasă abstractă concepută pentru a ajuta la traversarea și afișarea elementelor care au o structură ierarhică (sau copac). În realitate nu "face" (în sensul generării HTML) orice. Pur și simplu urmărește fiecare ramură a copacului tău: trebuie să fie extinsă de alte clase care să-i spună ce să facă pentru fiecare element pe care îl întâlnește. WordPress oferă propriile clase de extindere, cum ar fi:

  • Walker_Nav_Menu - pentru afișarea meniurilor HTML pentru navigare
  • Walker_Page - pentru afișarea unei liste de pagini
  • Walker_Category - pentru afișarea unei liste de termeni de taxonomie.

Fiecare dintre aceste clase extinde clasa Walker dictând pur și simplu ceea ce scoate clasa la fiecare element și nivel al arborelui. Pentru a deștima această clasă, vom analiza principalele sale metode și câteva exemple de utilizare a acesteia. Clasa însăși poate fi găsită aici.


Mergând copacul

Mers pe jos

plimbare ($ elemente, $ max_depth)

Clasa Walker este lansată cu ajutorul metodei Walk și această metodă returnează codul HTML odată ce a fost generat. Acceptă două argumente:

  1. O serie de elemente pe care dorim să le afișăm, care vor avea un fel de relație părinte-copil
  2. $ max_depth - stabilește câte generații analizăm
  3. Ok 3 ... Dacă zgâriați suprafața acestei metode, veți găsi că puteți trece de fapt argumente suplimentare care se adună într-o matrice: $ args. Acest lucru este apoi trecut la alte metode din clasă

Metoda de plimbare individualizează elementele "de nivel superior" - cele fără părinți - și le plasează într-o singură matrice. Ceilalți, copiii, sunt plasați într-o a doua matrice în care cheia reprezintă ID-ul părintelui său (este o matrice bidimensională deoarece un părinte poate avea mai mulți copii):

 $ children_elements = array ('1' => array () // Array de elemente corespunzătoare copiilor de 1, '4' => array () // Array de elemente corespunzătoare copiilor de 4);

Acesta apoi buclele prin fiecare dintre elementele părinte la rândul său și aplică metoda display_element.

Display_Element

display_element (elementul $, & $ children_elements, $ max_depth, $ depth = 0, $ args, & output)

Așa cum sugerează și numele display_element este responsabil pentru afișarea unui element în arborele nostru. De fapt, el numește mai multe funcții pentru a face acest lucru. Aceste funcții sunt în mod deliberat lăsate goale în clasa Walker - și acestea sunt modificate în clasele de extindere, deoarece determină HTML-ul real returnat. Acestea includ:

  • start_lvl - o funcție de returnare a codului HTML pentru începutul unui nou nivel. În cazul listelor, aceasta ar fi începutul unei noi "sub-liste", și astfel ar fi responsabil pentru returnarea
      etichetă
    • end_lvl - numit atunci când am terminat un nivel. În exemplul din meniul de navigare, această funcție este responsabilă pentru încheierea sub-listei cu o etichetă a listei de închidere
  • start_el - funcția responsabilă pentru afișarea elementului curent pe care suntem. În cazul meniurilor, aceasta înseamnă că
  • tag și link-ul elementului.
  • end_el - a fost afișată funcția numită după un element și toți copiii ei. Pentru exemplul nostru de meniuri, aceasta înseamnă returnarea unei închideri
  • etichetă.

Deci ce face? display_element de fapt face? De fapt, acolo are loc toată magia clasei Walker. Mai întâi, trebuie să aruncăm o privire asupra argumentelor pe care ni le oferim:

  • $ element de - acesta este elementul pe care suntem în prezent pe copacul nostru
  • $ children_elements - o serie de toate elemente de copil (nu doar copii ai elementului menționat mai sus). Aceasta este a doua matrice formată în mers pe jos și cheile sunt ID-urile părintelui.
  • $ max_depth - cât de departe ne este permis să explorăm
  • $ adâncime - cât de departe suntem în prezent
  • $ args - opțional argumente (menționate mai devreme)
  • $ ieșire - HTML până acum. Acest lucru este adăugat în timp ce explorăm mai mult din copac.

display_element primul apel start_el care este responsabil pentru afișarea elementului. Exact cum face acest lucru depinde de context. Pentru un meniu derulant, poate fi