Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
je bloque sur la creation d'un menu séparer en deux partie.
J'ai un menu Zend_Navigation avec 3 (ou plus) niveaux, que je shouterais avoir dans 2 div différentes, le niveau 1 séparé des autres niveaux qui seront affiché selon l'activité du niveau 1.
Actuellement :
navigation.xml
<accueil> <label>accueil</label> <controller>index</controller> <action>index</action> <pages> <lista> <label>listes</label> <controller>index</controller> <action>list</action> <pages> <essaie> <label>essaie</label> <controller>index</controller> <action>list</action> <params> <test>essaie</test> </params> </essaie> <final> <label>final</label> <controller>index</controller> <action>list</action> <params> <test>final</test> </params> </final> </pages> </lista> </pages> </accueil> <about> <label>about</label> <controller>about</controller> <action>index</action> <pages> <org> <label>organisation</label> <controller>about</controller> <action>index</action> <pages> <bur> <label>bureau</label> <controller>about</controller> <action>bureau</action> </bur> <adh> <label>adhérents</label> <controller>about</controller> <action>adherents</action> </adh> </pages> </org> <philo> <label>philosophie</label> <controller>about</controller> <action>philo</action> <pages> <prin> <label>principal</label> <controller>about</controller> <action>principal</action> </prin> <avn> <label>a venir</label> <controller>about</controller> <action>avenir</action> </avn> </pages> </philo> </pages> </about>
Layout.phtml
<div class="navigation"> <?=$this->navigation()->menu()->renderMenu(null, array('maxDepth'=>0));?> </div> <div class="subMenu"> <?=$this->navigation()->menu()->renderMenu(null, array('minDepth'=>1,'maxDepth'=>1,'onlyActiveBranch'=>true));?> </div> <div class="subMenuLevels"> <?=$this->navigation()->menu()->renderMenu(null, array('minDepth'=>2,'onlyActiveBranch'=>true)) ;?> </div>
Objectif :
<div class="navigation"> <?=$this->navigation()->menu()->renderMenu(null, array('maxDepth'=>0));?> </div> <div class="subMenu"> <?=$this->navigation()->menu()->renderMenu(null, array('minDepth'=>1,'onlyActiveBranch'=>true));?> </div>
Mais dans ce cas il n'affiche que la branche active prenant en compte le 3ème niveau, exemple :
// URL = /about // Affiche au 2ème niveau : <ul> <li>Organisation <ul> <li>Bureau</li> <li>Adhérents</li> </ul> </li> </ul> // Manque <li>Philosophie <ul> <li>Principal</li> <li>A venir</li> </ul> </li>
Hors je souhaiterais tenir compte de l'activité du niveau 1.
Idéalement j'aimerais pouvoir ajouter une class de niveau pour faciliter la création d'un drop down sous le niveau 2.
Merci d'avance,
Dede
Dernière modification par Dede (16-03-2011 08:25:23)
Hors ligne
avec onlyActiveBranch tu demande justement qu'on ne te lise que la branche active...
a mon avis avec les partial (si j'ai bien copris le truc) cela devrait aller : http://framework.zend.com/manual/fr/zen … ation.menu (exemple 44)
Hors ligne
Bonsoir,
Effectivement je ne demande que la branche active car si je ne fais pas cela, il me sort tous les liens du niveau 2 , Liste, Organisation et Philosophie hors j'aimerais n'avoir que Liste pour Accueil et les deux autres pour About.
Sinon j'ai effectivement fais des recherches du coté des partial mais je trouve que la doc est limitée.
je n'arrive pas à comprendre/appréhender toutes les possibilités de cette solution.
Hors ligne
perso je ne sais pas t'en fournir plus ... si tu trouve hésite pas a posté
Hors ligne
Bonjour,
Pour ceux que cela intéresse, je pense avoir une solution qui passe effectivement par un rendu partiel, ce n'est peut être pas la meilleur solution mais elle fonctionne.
Je me suis largement inspirer de ce tuto http://www.childofthemachine.com/blog/2 … us-part-1/
Ce qui donne dans le layout
// Premier niveau <div id="navigation"> <?=$this->navigation()->menu()->renderMenu(null, array('maxDepth'=>0));?> </div> // Autres niveau <div id="subMenu"> <?php $this->navigation()->menu()->setPartial(array( '/partialmenu.phtml','default'));?> <?=$this->navigation()->menu()->render();?> </div>
Le partialmenu.phtml
echo '<ul class="subnav">'; foreach ($this->container as $page) { // Uniquement si le premier niveau est actif if($page->isActive(true)){ foreach ($page as $page) { $liClass = $page->isActive(true) ? ' class="active"' : ''; // Si il y a un sous menu if($page->hasPages()){ // Ouvre la balise li echo '<li ' . $liClass . '>' . $this->menu()->htmlify($page), PHP_EOL; // Insert ul dropdown echo '<ul class="dropMenu">'; foreach ($page as $page) { $liClass = $page->isActive(false) ? ' class="active"' : ''; // Si lien visible if($page->isVisible(false)) echo '<li ' . $liClass . '>' . $this->menu()->htmlify($page) .'</li>', PHP_EOL; } echo '</ul>'; echo '</li>', PHP_EOL; }else{ // Sinon on affiche simplement le lien echo '<li ' . $liClass . '>' . $this->menu()->htmlify($page) .'</li>', PHP_EOL; } } } } echo '</ul>';
Ensuite un peu de CSS et je javascript pour cacher le dropdown par default et l'afficher au survole.
Je pense qu'il est possible de l'améliorer pour qu'il accepte plus de niveau...
Hors ligne
Pages: 1