2010-04-02 10 views
1

Première fois d'ici, alors s'il vous plaît nu avec moi. Je dois suivre le problème, en utilisant zend framework, en particulier zend_nav, pour créer un menu réutilisable à passer via la page layout/layout.phtml. Ce sont les fragments de code dans leurs fichiers respectifs.Zend_Nav dans le cadre de zend problème de faire apparaître le menu

d'abord en application/configs/navigation.xml,

<configdata> 
    <nav>  
     <label>Home</label> 
     <controller>index</controller> 
     <action>index</action> 
     <pages> 
      <add> 
       <label>Add</label> 
       <controller>post</controller> 
       <action>add</action> 
      </add> 
      <login> 
       <label>Admin</label> 
       <controller>login</controller> 
       <action>login</action> 
      </login> 
     </pages>  
    </nav> 
</configdata> 

c'est ensuite passé dans un objet dans le fichier Bootstrap.php (ne montrant que cette méthode spécifique)

protected function __initNavigation(){ 
    $this->bootstrap('layout'); 
    $layout = $this->getResource('layout'); 
    $view = $layout->getView(); 
    $config = new Zend_Config_Xml(APPLICATION .'/config/navigation.xml', 'nav'); 
    $container = new Zend_Navigation($config); 
    $view->navigation($container); 
} 

et puis enfin dans la vue layout.phtml, l'objet doit retourner le menu

<!-- application/layouts/scripts/layout.phtml --> 
<?php echo $this->doctype() ?> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head>   
    <title>Zend Blog !</title> 
    <?php echo $this->headLink()->appendStylesheet('/css/global.css')?> 
</head> 
<body> 
    <div id="header"> 
     <div id="header-logo"> 
      <b>Blog Me !</b> 
     </div> 
    </div> 
    <div id="menu">    
     <?php echo $this->navigation()->menu() ?> 
    </div> 
    <div id="content"> 
    <?php echo $this->layout()->content ?> 
    </div> 
</body> 
</html> 

Le menu ne s'affiche cependant pas quand je démarre mon application dans le navigateur, toutes les idées pour avoir mal tourné, est humblement reçu.

Merci à l'avance Kalle Johansson

Répondre

1

Si vous ne nommez la fonction __initNavigation avec deux _ souligne exprès vous comptiez le code à exécuter automatiquement. Pour qu'il s'exécute automatiquement, vous devez utiliser un seul trait de soulignement.

Un autre problème possible est que _initNavigation s'exécute avant _initView car Zend parcourt ces ressources dans l'ordre alphabétique. Mais alors vous n'avez pas besoin d'accéder à $view dans ce code. Vous pouvez utiliser le Zend_Registry pour stocker le conteneur de navigation:

protected function _initNavigation() { 
    $config = new Zend_Config_Xml(APPLICATION .'/config/navigation.xml', 'nav'); 
    $container = new Zend_Navigation($config); 
    Zend_Registry::set('Zend_Navigation', $container); 
} 

L'entrée de Registre Zend_Navigation sera utilisé par défaut par une aide de navigation lorsque aucun conteneur est spécifié.

1

Je pense que votre code est correct, juste votre fonction protégée __initNavigation() doit utiliser un seul _ dans votre _initNavigation()

Puis changer __initNavigation() à _initNavigation()

1

bien i`m impressionné, vraiment des réponses rapides, le problème avait plusieurs aspects, d'abord où vous avez raison d'utiliser un seul signe de soulignement, merci beaucoup à tous les deux! Et comme je l'ai t tourné, je ne mal orthographié,

$config = new Zend_Config_Xml(APPLICATION .'/config/navigation.xml', 'nav'); 

devrait être,

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

ma faute. Enfin, dans le fichier navigation.xml, à l'intérieur du nœud-node, il devrait y avoir des nœuds entourant chacun des nœuds "page", par exemple pour la maison. Il devrait avoir

<configdata> 
    <nav> 
     <home>  
     <label>Home</label> 
     <controller>index</controller> 
     <action>index</action> 
     </home> 

C'était tout!

Encore une fois, merci beaucoup pour vos conseils et astuces dans la bonne direction.

Sinc Kalle Johansson