Comprendere la classe Walker

Le voci di menu, le pagine e le tassonomie (gerarchiche) sono tutti esempi di dati con una struttura ad albero: i termini possono avere genitori, figli e fratelli. Di solito vorremmo riflettere questa struttura nel markup HTML. Per visualizzare un menu, ad esempio, vogliamo che l'HTML sia una lista di link di "livello superiore", con liste annidate dei loro figli, che a loro volta contengono liste annidate dei loro figli, e così via. Questo tutorial ti guiderà attraverso una classe di WordPress che rende estremamente semplice la produzione di questo mark-up.


Qual è la classe Walker?

La classe walker è una classe astratta progettata per aiutare a superare e visualizzare elementi che hanno una struttura gerarchica (o simile a un albero). In realtà non "fa" (nel senso di generare HTML) nulla. Traccia semplicemente ogni ramo del tuo albero: deve essere esteso da altre classi che gli dicono cosa fare per ogni elemento che incontra. WordPress fornisce le proprie classi di estensione, come ad esempio:

  • Walker_Nav_Menu - per visualizzare l'HTML per i menu di navigazione
  • Walker_Page - per visualizzare un elenco di pagine
  • Walker_Category - per visualizzare un elenco di termini di tassonomia.

Ognuna di queste classi estende la classe Walker semplicemente dettando ciò che la classe emette ad ogni elemento e livello dell'albero. Per demistificare questa classe, esamineremo i suoi metodi principali e un paio di esempi su come usarlo. La classe stessa può essere trovata qui.


Camminare sull'albero

Camminare

camminare ($ elementi, $ max_depth)

La classe walker viene avviata con il metodo walk ed è questo metodo che restituisce l'HTML una volta generato. Accetta due argomenti:

  1. Una serie di elementi che vogliamo mostrare, che avranno una sorta di relazione genitore-figlio
  2. $ max_depth - imposta il numero di generazioni che esploriamo
  3. Ok 3 ... Se grattate la superficie di questo metodo scoprirete che potete effettivamente passare argomenti extra che vengono raccolti in un array: $ args. Questo viene quindi passato ad altri metodi nella classe

Il metodo walk individua gli elementi di "livello superiore", quelli senza genitori, e li colloca in un unico array. Il resto, i bambini, sono collocati in un secondo array in cui la chiave è l'ID del suo genitore (è un array bidimensionale poiché un genitore può avere più figli):

 $ children_elements = array ('1' => array () // Matrice di elementi corrispondenti a figli di 1, '4' => array () // Matrice di elementi corrispondenti a figli di 4);

Quindi scorre a turno ciascuno degli elementi padre e applica il metodo display_element.

Display_Element

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

Come suggerisce il nome display_element è responsabile della visualizzazione di un elemento nel nostro albero. In effetti, chiama diverse funzioni per farlo. Queste funzioni vengono lasciate volutamente in bianco nella classe Walker - ed è queste che vengono alterate nelle classi di estensione, in quanto determinano il codice HTML restituito. Questi includono:

  • start_lvl - una funzione per restituire l'HTML per l'inizio di un nuovo livello. Nel caso delle liste, questo sarebbe l'inizio di una nuova 'sotto-lista', e quindi sarebbe responsabile della restituzione del
      etichetta
    • end_lvl - chiamato quando abbiamo finito un livello. Nell'esempio del menu di navigazione, questa funzione è responsabile della terminazione della sottocodice con un tag di chiusura
  • start_el - la funzione responsabile della visualizzazione dell'elemento corrente su cui ci troviamo. Nel caso dei menu, questo significa
  • tag e il link dell'articolo.
  • end_el - la funzione chiamata dopo un elemento e tutti i suoi figli sono stati visualizzati. Per il nostro esempio di menu questo significa restituire una chiusura
  • etichetta.

Quindi cosa fa display_element davvero? In realtà è dove si svolge tutta la magia della lezione Walker. Per prima cosa diamo un'occhiata a quali argomenti è stato fornito:

  • $ elemento - questo è l'elemento che stiamo attualmente sul nostro albero
  • $ children_elements - una serie di tutti elementi figlio (non solo figli dell'elemento di cui sopra). Questa è la seconda matrice formata nel camminare metodo e le chiavi sono gli ID del genitore.
  • $ max_depth - fino a che punto siamo in grado di esplorare
  • $ profondità - quanto siamo giù attualmente
  • $ args - argomenti facoltativi (menzionati in precedenza)
  • $ uscita - L'HTML finora. Questo è aggiunto a come esploriamo più dell'albero.

Il display_element metodo prime chiamate start_el che è responsabile della visualizzazione dell'elemento. Esattamente come ciò dipende dal contesto. Per un menu a discesa potrebbe essere