Die Walker-Klasse verstehen

Menüelemente, Seiten und (hierarchische) Taxonomien sind Beispiele für Daten mit einer baumartigen Struktur: Begriffe können Eltern, Kinder und Geschwister haben. Normalerweise möchten wir diese Struktur im HTML-Markup wiedergeben. Für die Anzeige eines Menüs möchten wir beispielsweise, dass der HTML-Code aus einer Liste von 'Top-Level'-Links besteht, mit verschachtelten Listen ihrer Kinder, die selbst verschachtelte Listen ihrer Kinder enthalten, und so weiter. Dieses Tutorial führt Sie durch eine von WordPress bereitgestellte Schulung, wodurch die Erstellung dieser Markierung extrem einfach ist.


Was ist die Walker-Klasse??

Die Walker-Klasse ist eine abstrakte Klasse, die dazu dient, Elemente mit hierarchischen (oder baumartigen) Strukturen zu durchqueren und anzuzeigen. Es 'tut' eigentlich nicht (im Sinne der Generierung von HTML) etwas. Es verfolgt einfach jeden Zweig Ihres Baums: Er muss durch andere Klassen erweitert werden, die ihm sagen, was für jedes Element zu tun ist, auf das er stößt. WordPress bietet eigene Erweiterungsklassen, wie zum Beispiel:

  • Walker_Nav_Menu - zum Anzeigen des HTML für Navigationsmenüs
  • Walker_Page - zum Anzeigen einer Liste von Seiten
  • Walker_Category - zum Anzeigen einer Liste mit Taxonomie-Begriffen.

Jede dieser Klassen erweitert die Walker-Klasse, indem sie einfach diktiert, was die Klasse bei jedem Element und jeder Ebene des Baums ausgibt. Um diese Klasse zu enträtseln, werden wir uns die wichtigsten Methoden und einige Beispiele für ihre Verwendung ansehen. Die Klasse selbst ist hier zu finden.


Den Baum spazieren

Gehen

walk ($ elements, $ max_depth)

Die Walker-Klasse wird mit der Walk-Methode gestartet. Diese Methode gibt den HTML-Code zurück, sobald er generiert wurde. Es akzeptiert zwei Argumente:

  1. Ein Array von Elementen, die angezeigt werden sollen, die eine Art Eltern-Kind-Beziehung haben
  2. $ max_depth - legt fest, wie viele Generationen wir erforschen
  3. Ok 3… Wenn Sie die Oberfläche dieser Methode zerkratzen, können Sie tatsächlich zusätzliche Argumente übergeben, die in einem Array gesammelt werden: $ args. Dies wird dann an andere Methoden in der Klasse übergeben

Bei der Walk-Methode werden die Elemente der obersten Ebene (diejenigen ohne Eltern) ausgewählt und in einem Array angeordnet. Der Rest, die untergeordneten Elemente, werden in einem zweiten Array platziert, in dem der Schlüssel die ID des übergeordneten Elements ist (es handelt sich um ein zweidimensionales Array, da ein übergeordnetes Element mehrere untergeordnete Elemente haben kann):

 $ children_elements = array ('1' => array () // Array von Elementen, die den Kindern von 1 entsprechen, '4' => array () // Array von Elementen, die den Kindern von 4 entsprechen);

Anschließend durchläuft es jedes der übergeordneten Elemente und wendet die Methode an display_element.

Display_Element

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

Wie der Name schon sagt display_element ist für die Anzeige eines Elements in unserem Baum verantwortlich. In der Tat werden dazu mehrere Funktionen aufgerufen. Diese Funktionen werden in der Walker-Klasse absichtlich leer gelassen - und diese werden in den Erweiterungsklassen geändert, da sie den tatsächlich zurückgegebenen HTML-Code bestimmen. Diese schließen ein:

  • start_lvl - eine Funktion, um den HTML-Code für den Beginn einer neuen Ebene zurückzugeben. Im Falle von Listen wäre dies der Beginn einer neuen "Unterliste" und damit die Rückgabe der
      Etikett
    • end_lvl - aufgerufen, wenn wir ein Level beendet haben. Im Navigationsmenü-Beispiel ist diese Funktion dafür verantwortlich, die Unterliste mit einem Schlusslisten-Tag zu beenden
  • start_el - die Funktion, die für die Anzeige des aktuellen Elements verantwortlich ist, in dem wir uns befinden. Bei Menüs ist dies die
  • Tag und der Link des Artikels.
  • end_el - Die Funktion, die nach einem Element und allen untergeordneten Elementen aufgerufen wurde, wurde angezeigt. Für unser Menübeispiel bedeutet dies, dass Sie einen Abschluss wiedergeben müssen
  • Etikett.

Was macht also? display_element eigentlich machen Hier findet eigentlich die ganze Magie der Walker-Klasse statt. Zuerst werfen wir einen Blick auf die Argumente, die gegeben wurden:

  • $ element - Dies ist das Element, an dem wir uns derzeit in unserem Baum befinden
  • $ children_elements - ein Array von alles untergeordnete Elemente (nicht nur untergeordnete Elemente des oben genannten Elements). Dies ist das zweite Array, das in gebildet wird gehen Methode und die Schlüssel sind die IDs des Elternteils.
  • $ max_depth - Wie weit dürfen wir erforschen
  • $ Tiefe - wie weit unten sind wir derzeit
  • $ args - optionale Argumente (bereits erwähnt)
  • $ ausgabe - Das HTML bisher. Dies wird hinzugefügt, wenn wir mehr vom Baum untersuchen.

Das display_element Methode ruft zuerst auf start_el welches für die Anzeige des Elements verantwortlich ist. Wie das genau geht, hängt vom Kontext ab. Bei einem Dropdown-Menü kann es sein