Comprendre la classe Walker

Les éléments de menu, les pages et les taxonomies (hiérarchiques) sont tous des exemples de données avec une structure semblable à une arborescence: les termes peuvent avoir parents, enfants et frères et soeurs. Généralement, nous aimerions refléter cette structure dans le balisage HTML. Pour l'affichage d'un menu, par exemple, nous voulons que le code HTML soit constitué d'une liste de liens de "niveau supérieur", avec des listes imbriquées de leurs enfants, contenant elles-mêmes des listes imbriquées de leurs enfants, etc. Ce tutoriel vous guidera à travers un cours fourni par WordPress, ce qui rend la production de cette annotation extrêmement simple..


Quelle est la classe Walker?

La classe walker est une classe abstraite conçue pour aider à parcourir et à afficher les éléments ayant une structure hiérarchique (ou arborescente). Ce n'est pas vraiment 'faire' (dans le sens de générer du HTML) n'importe quoi. Il trace simplement chaque branche de votre arbre: il doit être étendu par d'autres classes qui lui indiquent quoi faire pour chaque élément rencontré. WordPress fournit ses propres classes d'extension, telles que:

  • Walker_Nav_Menu - pour afficher le HTML pour les menus de navigation
  • Walker_Page - pour afficher une liste de pages
  • Walker_Catégorie - pour afficher une liste de termes de taxonomie.

Chacune de ces classes étend la classe Walker en dictant simplement ce que la classe doit afficher à chaque élément et à chaque niveau de l’arbre. Afin de démystifier cette classe, nous allons examiner ses principales méthodes et quelques exemples d'utilisation. La classe elle-même peut être trouvée ici.


Marcher dans l'arbre

Marche

marcher ($ éléments, $ max_depth)

La classe walker est lancée avec la méthode walk et c'est cette méthode qui renvoie le code HTML une fois qu'il a été généré. Il accepte deux arguments:

  1. Un tableau d'éléments que nous souhaitons afficher, qui auront une sorte de relation parent-enfant
  2. $ max_depth - définit combien de générations nous explorons
  3. Ok 3… Si vous grattez la surface de cette méthode, vous constaterez que vous pouvez réellement transmettre des arguments supplémentaires qui sont rassemblés dans un tableau: $ args. Ceci est ensuite passé à d'autres méthodes de la classe

La méthode de la marche sélectionne les éléments «de niveau supérieur» - ceux sans parents - et les place dans un tableau. Le reste, les enfants, sont placés dans un deuxième tableau où la clé est l'identifiant de son parent (c'est un tableau à deux dimensions, un parent pouvant avoir plusieurs enfants):

 $ children_elements = array ('1' => array () // Tableau d'éléments correspondant aux enfants de 1, '4' => array () // Tableau d'éléments correspondant aux enfants de 4);

Il parcourt ensuite chacun des éléments parents et applique la méthode. display_element.

Display_Element

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

Comme le nom le suggère display_element est responsable de l'affichage d'un élément dans notre arbre. En fait, il appelle plusieurs fonctions pour le faire. Ces fonctions sont délibérément laissées vides dans la classe Walker - et ce sont ces dernières qui sont modifiées dans les classes étendues, car elles déterminent le code HTML réel renvoyé. Ceux-ci inclus:

  • start_lvl - une fonction pour retourner le code HTML pour le début d'un nouveau niveau. Dans le cas de listes, ce serait le début d’une nouvelle "sous-liste" et il incomberait donc de renvoyer le message.
      étiquette
    • end_lvl - appelé quand on a fini un niveau. Dans l'exemple du menu de navigation, cette fonction est chargée de terminer la sous-liste avec une balise de liste de fermeture.
  • start_el - la fonction responsable d'afficher l'élément actuel sur lequel nous sommes. Dans le cas des menus, cela signifie que le
  • tag et le lien de l'article.
  • end_el - la fonction appelée après qu'un élément et tous ses enfants ont été affichés. Pour notre exemple de menu, cela signifie retourner une fermeture
  • étiquette.

Alors qu'est-ce que display_element fait réellement? C'est en fait là que se déroule toute la magie de la classe Walker. Voyons d'abord quels arguments il est donné:

  • élément $ - c'est l'élément que nous sommes actuellement sur notre arbre
  • $ enfants_elements - un étalage de tout éléments enfants (pas seulement les enfants de l'élément mentionné ci-dessus). C'est le deuxième tableau formé dans le marche méthode et les clés sont les identifiants du parent.
  • $ max_depth - jusqu'où nous sommes autorisés à explorer
  • $ profondeur - à quelle distance nous sommes actuellement
  • $ args - arguments optionnels (mentionnés précédemment)
  • $ sortie - Le HTML jusqu'à présent. Ceci est ajouté à mesure que nous explorons plus d'arbres.

le display_element méthode premiers appels start_el qui est responsable de l'affichage de l'élément. Cela dépend exactement du contexte. Pour un menu déroulant, il peut être