Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous,
Je viens de créer mon menu de navigation à partir de plusieurs tutos et je voudrais le poster car ça pourrait servir à quelqu’un d'autre qui se trouverais dans mon cas.
J'avais commencé par créer un menu avec seulement les contrôleurs et l'action index de chaque contrôleur et mon problème était que lorsque j'étais sur une autre action, je n'avais plus d'item actif dans le menu.
Ensuite j'ai créé le fichier xml avec toutes les action des contrôleurs mais le problème était que mon application plantait lorsqu'on cliquaient dans les liens car j'ai de webservices pour chercher mes données et en passant par le liens, les infos nécessaires pour les appels n'étaient pas fournies.
Finalement ce que j'ai fait, c'est de créer un menu partiel mais seulement pour me retourner les niveaux supérieurs du menu mais les indiquant comme actifs si l'un des ses sous-menus est active.
Maintenant quand on se trouve sur les différentes actions du même contrôleur, mon item de menu est actif.
Pour l'expliquer plus court, c'est un menu qui pointe seulement sur les actions index des contrôleurs mais que si nous sommes sur une autre action du même contrôleur, le menu reste actif.
Et voici le code :
Le fichier navigation.xml :
<?xml version="1.0" encoding="UTF-8"?> <configdata> <navigation> <acceuil> <label>Accueil</label> <controller>index</controller> </acceuil> <recherche> <label>Recherche de dossier</label> <controller>Recherche</controller> <action>index</action> <pages> <resultat> <label>Recherche</label> <controller>Recherche</controller> <action>resultat-recherche</action> </resultat> <enregistrer> <label>Enregistrer</label> <controller>Recherche</controller> <action>enregistrer</action> </enregistrer> </pages> </recherche> <historique> <label>Gestion historique</label> <controller>Historique</controller> <action>index</action> <pages> <modifier> <label>Modification</label> <controller>Historique</controller> <action>modifier</action> </modifier> <update> <label>Update</label> <controller>Historique</controller> <action>update</action> </update> </pages> </historique> <statistiques> <label>Statistiques</label> <controller>Statistiques</controller> <action>index</action> </statistiques> <welcare> <label>Welcare</label> <uri>http://www.########.com</uri> </welcare> </navigation> </configdata>
le code dans le layout :
<div id="menu"> <?php $this->navigation()->menu()->setPartial(array( '/common/partialmenu.phtml','default'));?> <?php echo $this->navigation()->menu()->render();?> </div>
la vue partielle du menu :
<?php echo '<ul class="navigation">'; // on boucle sur les pages de premier niveau foreach ($this->container as $pages) { // on test si le menu est actif $isActive = $pages->isActive(false); $isActifSousMenu = false; // pour les sous-menus // on boucle sur les pages de deuxième niveau foreach ($pages as $page) { // on test si le sous-menu est actif $isActifSousMenu = $page->isActive(true); if($isActifSousMenu) break; } // si le menu ou l'un des sous-menus est actif on envoi le menu comme actif if ($isActive || $isActifSousMenu) echo '<li class="active">' .$this->menu()->htmlify($pages) . '</li>' . PHP_EOL; else echo '<li>' .$this->menu()->htmlify($pages) . '</li>' . PHP_EOL; } echo '</ul>';
Voila!!! J'espère que ça servira à quelqu'un d'autre
Hors ligne
Pages: 1