, forståelse af walker - klasse,,,,, 17,,,,,,,,, 29,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,, menu, sider og hierarkiske) taxonomies er alle eksempler på data med et træ som struktur: vilkår kan have forældre, børn og søskende.normalt ville vi gerne afspejle denne struktur i html oveni.for at vise en menu, f.eks. ønsker vi at være: en liste over "højt niveau" forbindelser med indlejrede lister over deres børn, som selv indeholder indlejrede lister over deres børn, og så videre.denne lektion vil vejlede dig gennem en klasse wordpress giver, som gør denne avance, meget simpelt.,,, det er walker?, walker - klasse er en abstrakt klasse, som har til formål at hjælpe ind og vise de elementer, der er en hierarkisk (eller træ) struktur.det er faktisk ikke gøre « (i den forstand, at generere html), hvad som helst.det spor hver filial af dit træ: det skal udvides med andre klasser, som fortælle den, hvad den skal gøre for hvert enkelt element, der kommer på tværs.wordpress giver sin egen udvidelse af klasser, som f.eks.:,, walker_nav_menu, – til visning af html til navigation menukort, walker_page, – til visning af en liste af sider, walker_category, – for at vise en liste over taksonomi.,, og hver af disse klasser, udvide walker klasse ved at diktere, hvad klasse output på hvert element og omfanget af træ.med henblik på at afmystificere denne klasse, vi skal se på de vigtigste metoder og et par eksempler på, hvordan man bruger det.klasse i sig selv kan blive fundet her.,, at træ, gå, gå ($elementer, $max_depth), walker - klasse bliver smidt ud med den tur metode, og det er denne metode, der returnerer html, når det er blevet produceret.det accepterer to argumenter:,, en række elementer, som vi ønsker at vise, som vil have en slags forældres forhold, $max_depth, – fastsætter, hvor mange generationer vi udforske, okay. 3.hvis du kradser lidt i overfladen af denne metode, vil du finde dig rent faktisk kan give ekstra argumenter, der bliver samlet i et system: $args,.det er så videre til andre metoder i klassen, - metode, fremhæver den øverste "elementer – uden forældre – og placerer dem i en vifte.resten, de børn, der er anbragt i et andet system, hvor nøglen er id af moderselskabet (det er en to - system som en forælder kan have flere børn): $children_elements = system ((') = > array() //samling af elementer, der svarer til børn af 1, 0) = > array() //samling af elementer, der svarer til børn på 4); det så sløjfer gennem hvert af de stiftende elementer i tur og anvender den metode, display_element,.,, display_element,, display_element ($element, &. $children_elements, $max_depth $dybde = 0, $args, og amp; $produktion), som navnet antyder, display_element, er ansvarlig for at vise et element i vores træ.det kræver flere funktioner, for at gøre dette.disse funktioner er med vilje blank i walker - klasse –, og det er disse, der er ændret i forlængelse af klasser, som fastsætter de faktiske html tilbage.disse omfatter:,, start_lvl, – funktion at vende tilbage, html til begyndelsen på en ny plan.i tilfælde af lister, vil dette være begyndelsen på en ny "sub - liste, og så vil være ansvarlig for at returnere, < ul > et, end_lvl, – ringede, når vi er færdige med en plan.i navigation menu. denne funktion er ansvarlig for afslutning af delliste, lukket med en liste - < /ul >,, start_el, – funktion, der viser den aktuelle element, vi er på.i tilfælde af menuer, det betyder, < li >, mærke og punkt på dagsordenen er link.,, end_el, – funktionen ringede efter et element, og det er børn, der har været udstillet.for vores menu eksempel betyder dette, at vende tilbage en lukning, < /li >,,.,, hvad betyder, display_element, egentlig?det er faktisk, hvor alle de magiske af walker - klasse finder sted.først lad os se på, hvad det er: argumenter, $element, – er dette element i øjeblikket er vi i vores træ, $children_elements, – en række, alle børn elementer (ikke kun børn af det element, der er nævnt ovenfor).dette er det andet system oprettet i går, metode og nøglerne er id af modervirksomheden.,, $max_depth, –, hvor langt vi har lov til at udforske, $dybde, –, hvor langt vi i øjeblikket er $args, – frivilligt argumenter (nævnt ovenfor), $produktion det, – http: //hidtil.det er tilføjet som vi udforske træet.,,, display_element, metode første opkald, start_el, som er ansvarlig for visning af element.præcis, hvordan det er, afhænger af den sammenhæng.for en ud menu, kan det være, < udvælge > løbende konto eller til navigation menu, kan den < li > løbende konto.bemærker, at der ikke er at lukke et endnu.hvis dette element har børn, er vi nødt til at vise dem først, så at de satte sig ind i dette punkt på dagsordenen.så det næste kontrol, hvis den aktuelle element, vi er børn, og at vi ikke har nået den maksimale dybde.hvis vi undersøge hvert af de børn igen, ved at kræve, display_element for hver af dem (med dybde argument øges med én).på denne måde, display_element, rekursivt kalder sig, indtil vi når bunden. hvis vi har nået den bottom "(et element med børn eller maksimal dybde), så kræver det, end_el, som tilføjer den sidste brik.det aktuelle tilfælde af, display_element, afsluttes, og vi flytter tilbage til den af forældrene, der gælder, display_element, til den næste barn, indtil vi har behandlet hver af sine børn.når moderselskabet har ikke flere børn gik vi flytter tilbage op i træet, og så videre, indtil hver filial er undersøgt.forvirret?han er et diagram, som jeg håber vil gøre ting, ved hjælp af walker - klasse: et enkelt eksempel ved hjælp af walker - klasse gør med skik hierarchal data meget enkelt.hvis du har en række genstande, med ", etiket,,, parent_id," og ", object_id, egenskaber, som de ønsker at vise en liste over.dette kan nu let kunne opnås med en meget simpel klasse:,, give mulighed for at præcisere deres egen tradition, walker klasse – tillader dig at ændre deres udseende relativt let, med angivelse af deres egen tradition, walker klasse.i mange tilfælde er det faktisk lettere at forlænge en passende walker udvidelse, snarere end walker - klasse selv. hvis du vil have en sekundær (under) menu, som er relateret til deres primære menu.dette kan tage form af forbindelser, der sidder lige under din primære menu eller en side bar, som viser, at kun de efterkommer "menu poster i den nuværende" på side ".som et eksempel fra diagrammet ovenfor, hvis vi er på "arkiv, forfatter" eller "nyheder" sub - sider, vil vi gerne vise alle de forbindelser under "arkiv.da walker_nav_menu, gør alt, hvad vi ønsker, vi skal udvide denne klasse snarere end walker - klasse.det sparer os for en masse arbejde, eftersom det, walker_nav_menu, tilføjer de relevante klasser ("nuværende,", "nuværende forfader, osv.) til den relevante forbindelser.vi skal udvide, walker_nav_menu, walker klasse at ændre tankegang, en smule, og forhindre, at den udviser en maksimal forbindelser eller andre af efterkommere af »ikke - rod "sider. nogle grundlæggende arbejde: tema områder, først og fremmest i din model filer, vi vil bruge den, wp_nav_menu(), funktion, to gange, idet den samme tema, beliggenhed, vil jeg kalde den" primære ").hvis du ikke har et tema, hvor registrerede allerede, du skal læse denne artikel.hvis du bruger tema, hvor du skal redde en menu til det sted.vi skal vise det to gange.første, hvor vil du have din "topstyret" menu skal anføres:, wp_nav_menu (array ('theme_location = >'primary,'depth = > 1), igen, med en speciel walker, for kun at vise (relevante) barn sider. wp_nav_menu (array ('theme_location = >'primary,'walker = > nye sh_child_only_walker(),'depth = > 0), forlængelse af walker, vi ønsker ikke at udvise maksimal forældre.minder om, at den funktion, der er ansvarlig for den åbning, < li >, mærke og led, er start_el, og den funktion, der er ansvarlig for lukning, < /li >, tag er, end_el,.vi kontrollere, om vi er på moderselskabets niveau.hvis vi er det, vi ikke gør noget.ellers fortsætter vi som normale og kalde funktion fra, walker_nav_menu, klasse. //ikke trykker på elementer funktion start_el (& $output, $på $dybde = 0, $args = array()) (hvis (0 = = $dybde) tilbage; forældre: start_el (& $output, $på $dybde, $args)} funktion end_el (& $output, $på $dybde = 0, $args = array()) (hvis (0 = = $dybde) tilbage; forældre: end_el (& $output, $punkt - dybde, $args)}, vi udvider, display_element,.denne funktion er ansvarlig for at sejle ned af filialer.vi vil stoppe det i sine spor, hvis vi er på topniveau og ikke på det nuværende rod, link.for at kontrollere, om den gren af, vi er på, er "løbende", vi kontrollere, om den konto er en af følgende kategorier: "nuværende menupunkt", "nuværende menu forælder,,, nuværende menu forfader. //kun følge en filial fungerer display_element ($element, og amp. $children_elements, $max_depth $dybde = 0, $args, & $output) (//se om element som" aktuelle element "klasse $current_element_markers = system (" nuværende menupunkt "," nuværende menu forældre "," nuværende menu forfader. $current_class = array_intersect ($current_element_markers $element - > klasser); //hvis element har en "løbende" klasse, det er en forfader til den aktuelle element $ancestor_of_current =!tom ($current_class); //, hvis dette er en overordnet sammenhæng og ikke den nuværende, eller "af den nuværende menupunkt - stop her.hvis (0 = = $dybde & &!$ancestor_of_current) afkast; forældre: display_element ($element, &. $children_elements, $max_depth $dybde, $args, & $produktion);}, vi nu udvide, start_lvl, og end_lvl, funktioner.de er ansvarlige for outputting den html det var et niveau (i dette tilfælde, < ul >, mærker).If we are on the top level we don't want to display these tags (after all the contents will not be shown)., //Don't wrap the top level function start_lvl(&$output, $depth=0, $args=array()) { \tif( 0 == $depth ) \t\treturn; \tparent::start_lvl(&$output, $depth, $args); } function end_lvl(&$output, $depth=0, $args=array()) { \tif( 0 == $depth ) \t\treturn; \tparent::end_lvl(&$output, $depth, $args); },That class in full:, class SH_Child_Only_Walker extends Walker_Nav_Menu { \t//Don't start the top level \tfunction start_lvl(&$output, $depth=0, $args=array()) { \t\tif( 0 == $depth ) \t\t\treturn; \t\tparent::start_lvl(&$output, $depth,$args); \t} \t//Don't end the top level \tfunction end_lvl(&$output, $depth=0, $args=array()) { \t\tif( 0 == $depth ) \t\t\treturn; \t\tparent::end_lvl(&$output, $depth,$args); \t} \t//Don't print top-level elements \tfunction start_el(&$output, $item, $depth=0, $args=array()) { \t\tif( 0 == $depth ) \t\t\treturn; \t\tparent::start_el(&$output, $item, $depth, $args); \t} \tfunction end_el(&$output, $item, $depth=0, $args=array()) { \t\tif( 0 == $depth ) \t\t\treturn; \t\tparent::end_el(&$output, $item, $depth, $args); \t} \t//Only follow down one branch \tfunction display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ) { \t\t//Check if element as a 'current element' class \t\t$current_element_markers = array( 'current-menu-item', 'current-menu-parent', 'nuværende menu forfader. $current_class = array_intersect ($current_element_markers $element - > klasser); //hvis element har en "løbende" klasse, det er en forfader til den aktuelle element $ancestor_of_current =!tom ($current_class); //, hvis dette er en overordnet sammenhæng og ikke den nuværende, eller "af den nuværende menupunkt - stop her.hvis (0 = = $dybde & &!$ancestor_of_current) afkast forældre: display_element ($element, &. $children_elements, $max_depth $dybde, $args, & $produktion);}}, når du forstår, hvor walker - klasse arbejder du kan udvide det (eller wordpress eksisterende forlængelser) til at ændre deres hierarchal data vises.for eksempel kan du:,, omfatte beskrivelser af menuen forbindelser eller kategori beskrivelser. udelukke hele grene af en menu for loggede ud brugere. omfatte post - meta - på din liste af sider.
forståelse af walker - klasse
Previous:at skabe en wordpress net dims