De Walker-klasse begrijpen

Menu-items, pagina's en (hiërarchische) taxonomieën zijn allemaal voorbeelden van gegevens met een boomachtige structuur: termen kunnen ouders, kinderen en broers en zussen hebben. Meestal willen we deze structuur weergeven in de HTML-markup. Voor het weergeven van een menu willen we bijvoorbeeld dat de HTML een lijst met 'topniveau'-links is, met geneste lijsten van hun kinderen, die zelf geneste lijsten van hun kinderen bevatten, enzovoort. Deze tutorial begeleidt je door een les in WordPress biedt die het maken van deze opmaak extreem eenvoudig maakt.


Wat is de Walker-klasse?

De Walker-klasse is een abstracte klasse die is ontworpen om te helpen bij het doorkruisen en weergeven van elementen die een hiërarchische (of boomachtige) structuur hebben. Het 'doet' het niet (in de betekenis van het genereren van HTML) iets. Het traceert eenvoudig elke tak van je boom: het moet uitgebreid worden door andere klassen die het vertellen wat te doen voor elk element dat het tegenkomt. WordPress biedt zijn eigen uitbreidingsklassen, zoals:

  • Walker_Nav_Menu - voor het weergeven van de HTML voor navigatiemenu's
  • Walker_Page - voor het weergeven van een lijst met pagina's
  • Walker_Category - voor het weergeven van een lijst met taxonomietermen.

Elk van deze klassen breidt de Walker-klasse uit door simpelweg te dicteren wat de klasse uitvoert op elk element en niveau van de boom. Om deze klasse te ontmystificeren, zullen we kijken naar de belangrijkste methoden en een paar voorbeelden van hoe deze te gebruiken. De klas zelf is hier te vinden.


Walking the Tree

Lopen

lopen ($ elementen, $ max_depth)

De Walker-klasse wordt gestart met de methode Walk en het is deze methode die de HTML retourneert zodra deze is gegenereerd. Het accepteert twee argumenten:

  1. Een reeks elementen die we willen weergeven, met een soort ouder-kindrelatie
  2. $ max_depth - bepaalt hoeveel generaties we onderzoeken
  3. Ok 3 ... Als je het oppervlak van deze methode bekrast, zul je zien dat je extra argumenten kunt doorgeven die in een array verzameld worden: $ args. Dit wordt vervolgens doorgegeven aan andere methoden in de klas

De wandelmethode selecteert de elementen op het hoogste niveau - die zonder ouders - en plaatst ze in één array. De rest, de kinderen, worden in een tweede array geplaatst waar de sleutel de ID van de bovenliggende array is (het is een tweedimensionale array aangezien een ouder meerdere kinderen kan hebben):

 $ children_elements = array ('1' => array () // Array van elementen die overeenkomen met kinderen van 1, '4' => array () // Array van elementen die overeenkomen met kinderen van 4);

Vervolgens worden de bovenliggende elementen om beurten doorlopen en wordt de methode toegepast display_element.

Display_Element

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

Zoals de naam al doet vermoeden display_element is verantwoordelijk voor het weergeven van een element in onze stamboom. In feite roept het verschillende functies om dit te doen. Deze functies zijn bewust leeg gelaten in de klasse Walker - en deze zijn gewijzigd in de verlengende klassen, omdat ze de daadwerkelijke HTML-code bepalen die wordt geretourneerd. Waaronder:

  • start_lvl - een functie om de HTML terug te sturen naar het begin van een nieuw niveau. In het geval van lijsten zou dit het begin zijn van een nieuwe 'sublijst', en zou dus verantwoordelijk zijn voor het retourneren van de
      label
    • end_lvl - gebeld wanneer we een level hebben voltooid. In het voorbeeld van het navigatiemenu is deze functie verantwoordelijk voor het beëindigen van de sublijst met een afsluitende lijsttag
  • start_el - de functie die verantwoordelijk is voor het weergeven van het huidige element waar we op staan. In het geval van menu's betekent dit het
  • tag en de link van het item.
  • end_el - de functie die is genoemd naar een element en al zijn kinderen zijn weergegeven. Voor ons menu betekent dit het retourneren van een afsluiting
  • label.

Dus wat doet het display_element eigenlijk doen? Het is eigenlijk waar alle magie van de Walker-klasse plaatsvindt. Laten we eerst eens kijken naar de argumenten die het heeft gekregen:

  • $ element - dit is het element dat we momenteel in onze boom hebben
  • $ children_elements - een reeks van allemaal onderliggende elementen (niet alleen kinderen van het element waarnaar hierboven wordt verwezen). Dit is de tweede reeks gevormd in de lopen methode en de sleutels zijn de ID's van de ouder.
  • $ max_depth - hoe diep we mogen verkennen
  • $ diepte - hoe diep we op dit moment zijn
  • $ args - optionele argumenten (eerder genoemd)
  • $ uitgang - De HTML tot nu toe. Dit wordt toegevoegd als we meer van de boom verkennen.

De display_element methode eerste oproepen start_el welke verantwoordelijk is voor het weergeven van het element. Precies hoe dat gebeurt, hangt af van de context. Voor een vervolgkeuzemenu is dat mogelijk