2010-09-23 6 views
3

Je dispose d'un fichier navigation.xml:Zend Navigation - divers blocs de navigation

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
    <nav> 
     <programm_nav> 
      <label></label> 
      <uri>#</uri> 
      <pages> 
       <all> 
        <label>test1</label> 
        <resource>default:programme</resource> 
        <module>default</module> 
        <controller>programme</controller> 
        <action>list</action> 
        <privilege>index</privilege> 
       </all>      
      </pages> 
     </programm_nav> 
     <acc_nav> 
     <label></label> 
      <uri>#</uri> 
      <pages> 
       <ueb> 
        <label>test2</label> 
        <resource>default:account</resource> 
        <module>default</module> 
        <controller>account</controller> 
        <action>index</action> 
        <privilege>index</privilege> 
       </ueb>      
      </pages> 
     </acc_nav> 
    </nav> 
</config> 

Ce fichier de configuration définit deux zones de navigation, un programm_nav et l'autre acc_nav.

Dans mon bootstrap je fais ce qui suit:

$navContainerConfig = new Zend_Config_Xml (APPLICATION_PATH . 
'/configs/navigation.xml', 'nav');  

$navContainer = new Zend_Navigation ($navContainerConfig); 

$view->navigation ($navContainer)->setAcl ($this->_acl) 
->setRole (Zend_Registry::get ('role')); 

À mon avis, j'afficher la navigation:

$navSec = $this->navigation()->findOneByLabel ('acc_nav'); 
echo $this->navigation()->menu()->renderMenu ($navSec); 

Mais peu importe comment je définis $navSec j'affiche toujours programm_nav et jamais une autre boîte. acc_nav n'est jamais affiché.

Une idée?

Répondre

1

findOneByLabel('acc_nav'); va rechercher du texte dans <label> -tags comme il est nog acc_nav valeur. Il ne le trouvera pas.

+1

merci, cela m'a aidé :) –

0

J'ai reproduit cela et ce qui est arrivé ....

Je reçois deux liens, l'un pour test1 et un pour test2.

Je dois enlever le code pour votre ACL parce que je ne l'ai pas, alors essayez d'enlever ceci. Si cela fonctionne alors, sachez que la configuration de votre ACL est incorrecte.

Je viens de définir la nav contenue dans le registre, puis le récupérer dans le fichier de script. Ce n'est peut-être pas le meilleur moyen, mais vu les docs de ZF sur ce sujet, c'était ma seule solution. Il pourrait bien être mieux documenté maintenant.

Dans mon Bootstrap je

function _initNav() 
{ 
    $navContainerConfig = new Zend_Config_Xml (APPLICATION_PATH . '/configs/navigation.xml', 'nav');  

    $navContainer = new Zend_Navigation ($navContainerConfig); 

    Zend_Registry::set("navigation", $navContainer);   
} 

Et mon dossier de vue ressemble à ce

<?php 

    $navSec = $this->navigation(Zend_Registry::get("navigation")) 
     ->findOneByLabel('acc_nav'); 

    echo $this->navigation()->menu()->renderMenu($navSec); 

?>