2010-04-02 48 views
1

第一次来这里,所以请和我一起裸照。 我不得不面对以下问题,使用zend框架,特别是zend_nav创建一个可通过layout/layout.phtml页面传递的可重用菜单。这些是各自文件中的代码片段。Zend_Nav在zend框架问题中得到菜单显示

第一应用程序/ 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> 

此然后被传递到在bootstrap.php中文件(仅示出具体的方法)的对象

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); 
} 

和最后在视图layout.phtml中,对象应该返回菜单

<!-- 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> 

菜单然而,当我在浏览器中启动我的应用程序时,并没有显示出来,但任何想法可能出错了,都被虚心接受。

在此先感谢卡尔·约翰逊

回答

1

如果没有两个_命名功能__initNavigation强调的目的,那么你可能预期的代码自动运行。为了自动运行,你需要使用一个下划线。

另一个可能的问题是_initNavigation_initView之前运行,因为Zend按字母顺序浏览这些资源。但是在这段代码中你不需要访问$view。您可以使用Zend_Registry存储导航容器:

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

Zend_Navigation注册表项将被默认任何导航帮助没有指定容器时使用。

1

我觉得你的代码是正确的,只是你的保护功能__initNavigation() 应该只使用一个__initNavigation()

然后换__initNavigation()_initNavigation()

1

好吧我真的留下深刻的印象,真正快速解答,问题有几个方面,首先你们两个都使用一个下划线标志是正确的,非常感谢你们两个! 随着I T横空出世,我没有拼错,

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

应该是,

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

我的错。最后,在 - 节点内的navigation.xml文件中缺失,应该在每个“页面”节点周围有节点,例如家庭。它应该有

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

就是这样!

再一次,非常感谢您的提示和提示我正确的方向。

Sinc Kalle Johansson