Förstå Walker klassen

Menyalternativ, sidor och (hierarkiska) taxonomier är alla exempel på data med en trädliknande struktur: termer kan ha föräldrar, barn och syskon. Vanligtvis vill vi återspegla denna struktur i HTML-uppställning. För att visa en meny vill vi till exempel att HTML-en innehåller en lista över "högsta nivå" -länkar, med kapslade listor över sina barn, som själva innehåller inbyggda listor över sina barn och så vidare. Denna handledning guidar dig genom en klass som WordPress tillhandahåller, vilket gör att det här är mycket enkelt att producera.


Vad är Walker Class?

Walker klassen är en abstrakt klass utformad för att hjälpa till att korsa och visa element som har en hierarkisk (eller trädliknande) struktur. Det gör inte egentligen "gör" (i den meningen att det genereras HTML) något. Det spårar helt enkelt varje gren av ditt träd: det måste utökas av andra klasser som berättar vad man ska göra för varje element som det kommer över. WordPress ger sina egna utökande klasser, till exempel:

  • Walker_Nav_Menu - för att visa HTML för navigeringsmenyer
  • Walker_Page - för att visa en lista med sidor
  • Walker_Category - för att visa en lista över taxonomi villkor.

Var och en av dessa klasser utökar Walker-klassen genom att helt enkelt diktera vad klassen matar ut på varje element och nivå av trädet. För att förklara denna klass ska vi titta på dess huvudmetoder och ett par exempel på hur man använder den. Klassen själv kan hittas här.


Går trät

Promenad

promenad ($ element, $ max_depth)

Walker-klassen startas med gångmetoden och det är den här metoden som returnerar HTML när den har genererats. Den accepterar två argument:

  1. En rad element som vi vill visa, vilket kommer att ha någon form av föräldra-barn-relation
  2. $ max_depth - anger hur många generationer vi utforskar
  3. Ok 3 ... Om du kliar på ytan av den här metoden hittar du att du faktiskt kan skicka extra argument som samlas in i en array: $ args. Detta skickas sedan till andra metoder i klassen

Gåmetoden utpekar elementet "toppnivå" - de utan föräldrar - och placerar dem i en grupp. Resten, barnen, placeras i en andra grupp där nyckeln är dess förälders ID (det är en tvådimensionell grupp som en förälder kan ha flera barn):

 $ children_elements = array ('1' => array () // Array av element som motsvarar barn av 1, '4' => array () // Array av element som motsvarar barn av 4);

Det loopar sedan igenom var och en av moderelementen i sin tur och tillämpar metoden display_element.

Display_Element

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

Som namnet antyder display_element ansvarar för att visa ett element i vårt träd. Faktum är att det kallar flera funktioner för att göra detta. Dessa funktioner är medvetet lämnat tomma i Walker-klassen - och det är dessa som ändras i de utvidgade klasserna, eftersom de bestämmer den faktiska HTML som returneras. Dessa inkluderar:

  • start_lvl - en funktion för att returnera HTML för början på en ny nivå. När det gäller listor skulle detta vara början på en ny "underlista", och det skulle också vara ansvaret för att returnera
      märka
    • end_lvl - kallas när vi har avslutat en nivå. I navigeringsmenyns exempel är den här funktionen ansvarig för att sluta dellistan med en slutlista-tagg
  • start_el - funktionen som är ansvarig för att visa det aktuella elementet vi är på. När det gäller menyer betyder detta
  • taggen och objektets länk.
  • end_el - funktionen som kallas efter ett element och allt det är barn har visats. För vårt meny exempel betyder det att vi återkommer en stängning
  • märka.

Så vad gör det display_element faktiskt gör? Det är faktiskt där all den magiska Walker-klassen äger rum. Låt oss först titta på vilka argument det ges:

  • $ elementet - Det här är det element vi är närvarande på på vårt träd
  • $ children_elements - en uppsättning av Allt barnelement (inte bara barn till det element som avses ovan). Detta är den andra matrisen som bildas i promenad metod och nycklarna är föräldrarnas ID.
  • $ max_depth - hur långt ner får vi utforska
  • $ djup - hur långt ner är vi idag
  • $ args - valfria argument (nämnd tidigare)
  • $ utgång - HTML hittills. Detta läggs till när vi utforskar mer av trädet.

De display_element metod första samtal start_el som är ansvarig för att visa elementet. Exakt hur det beror på kontexten. För en rullgardinsmeny kan det vara