web-dev-qa-db-fra.com

Comment fonctionne la classe Walker?

Quelqu'un peut-il m'expliquer comment le Walker Class fonctionne? Les méthodes de la classe doivent-elles toujours surcharger la méthode parent?

6
Karun

J'ai cherché et lu à propos de la classe de marcheur. J'ai fait des tests, j'ai joué avec le code et je l'ai enfin compris. J'espère que cela peut être utile aux autres aussi.

Vous aurez besoin d'implémenter la classe walker pour cela.

Voici un exemple simple.

$defaults = array(
        'theme_location'  => 'primary',
        'container'       => 'ul',
        'menu_class'      => 'nav navbar-nav main-nav',
        'walker'          => new Primary_Walker_Nav_Menu()
);

wp_nav_menu( $defaults );

Dans le bloc de code ci-dessus, la fonction wp_nav_menu() prend $defaults en argument. Dans le tableau $defaults, la dernière clé estwalker. La valeur de la clé marcheur est l’objet d’une classe Primary_Walker_Nav_Menu. Dans le fichier functions.php, implémentez le code suivant.

class Primary_Walker_Nav_Menu extends Walker_Nav_Menu {
    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
        if ( array_search( 'menu-item-has-children', $item->classes ) ) {
            $output .= sprintf( "\n<li class='dropdown %s'><a href='%s' class=\"dropdown-toggle\" data-toggle=\"dropdown\" >%s</a>\n", ( array_search( 'current-menu-item', $item->classes ) || array_search( 'current-page-parent', $item->classes ) ) ? 'active' : '', $item->url, $item->title );
        } else {
            $output .= sprintf( "\n<li %s><a href='%s'>%s</a>\n", ( array_search( 'current-menu-item', $item->classes) ) ? ' class="active"' : '', $item->url, $item->title );
        }
    }

    function start_lvl( &$output, $depth ) {
        $indent = str_repeat( "\t", $depth );
        $output .= "\n$indent<ul class=\"dropdown-menu\" role=\"menu\">\n";
    }
}

La méthode start_el() est utilisée pour ajouter la balise HTML d'ouverture pour un élément d'arborescence unique (tel que <li>, <span> ou <a>) à $output.

La méthode start_lvl() est exécutée lorsque le randonneur atteint le début d’une nouvelle "branche" dans l’arborescence. Généralement, cette méthode est utilisée pour ajouter la balise d'ouverture d'un élément HTML conteneur (tel que <ol>, <ul> ou <div>) à $output.

La sortie de l'implémentation ci-dessus entraînera le bloc de code html suivant.

<ul id="menu-main-navigation" class="nav navbar-nav main-nav">
   <li class="dropdown ">
      <a href="http://karunshakya.com.np/services/" class="dropdown-toggle">Services</a>
      <ul class="dropdown-menu" role="menu">
         <li><a href="http://karunshakya.com.np/services/selection-et-recrutement/">Sélection et recrutement</a></li>
         <li><a href="http://karunshakya.com.np/services/mise-disposition-de-personnel/">Mise disposition de personnel</a></li>
         <li><a href="http://karunshakya.com.np/services/gestion-de-salaire/">Gestion de salaire</a></li>
      </ul>
   </li>
   <li><a href="http://karunshakya.com.np/news/">News</a></li>
   <li><a href="http://karunshakya.com.np/medias/">Medias</a></li>
   <li class="last-child"><a href="http://karunshakya.com.np/contactez-nous/">Contactez-nous</a></li>
</ul>

Le lien ci-dessous explique comment utiliser la classe de marcheur http://code.tutsplus.com/tutorials/understanding-the-walker-class--wp-25401

9
Karun