2012-04-24 86 views
0

我定义我的所有页面的XML文件,如下所示:Zend的导航 - 渲染一个子菜单

<?xml version="1.0" encoding="UTF-8"?> 
<configdata> 
<nav> 
    <dashboard> 
     <label>Dashboard</label> 
     <module>default</module> 
     <controller>dashboard</controller> 
     <action>index</action> 
     <title>Die Schaltzentrale</title> 
    </dashboard> 
    <user> 
     <label>User</label> 
     <module>default</module> 
     <controller>user</controller> 
     <action>index</action> 
     <title>Verwaltung der Benutzer</title> 

     <userList>     
      <module>default</module> 
      <controller>user</controller> 
      <action>index</action> 
      <label>Userliste anzeigen</label> 
     </userList> 
     <newUser> 
      <label>User anlegen</label> 
      <module>default</module> 
      <controller>user</controller> 
      <action>new</action> 
     </newUser> 
     <editUser> 
      <label>User bearbeiten</label> 
      <module>default</module> 
      <controller>user</controller> 
      <action>edit</action> 
     </editUser> 
    </user> 
</nav> 
</configdata> 

在我的引导设置我的导航是这样的:

protected function _initNavigation() 
    { 
     $this->bootstrap('layout'); 
     $layout = $this->getResource('layout'); 
     $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml','nav'); 
     $view = $layout->getView(); 
     $navigation = new Zend_Navigation($config); 
     $view->navigation($navigation); 
     Zend_Registry::set('Zend_Navigation',$navigation); 
    } 

这种设置使我使用以下行显示我的主菜单:

$partial = array('menu.phtml', 'default'); 
$this->navigation()->menu()->setPartial($partial); 
echo $this->navigation()->menu()->render(); 

到目前为止好。我的问题是现在呈现一个特定的子菜单。假设我想用用户控制器的所有操作呈现菜单。我试图渲染它:

$page = $this->navigation()->findOneBy('controller','user'); 
echo $this->navigation()->menu()->renderMenu($page); 

但我没有输出。我也尝试通过设置minDepth或maxDepth选项获得输出而没有任何成功。有没有人对我有所帮助,我如何才能使它起作用?

回答

2

您的方法非常接近。在findOneBy行更改为:

$page = $this->navigation()->findOneBy('label','User');

这将获取所有用户页面下的页面。

我不认为有可能通过控制器找到一个页面。

[编辑]

我已经加入下用户“页”部分修改您的XML。这告诉Zend Navigation,userList,newUser和editUser是用户的子页面:

<?xml version="1.0" encoding="UTF-8"?> 
<configdata> 
<nav> 
    <dashboard> 
     <label>Dashboard</label> 
     <module>default</module> 
     <controller>dashboard</controller> 
     <action>index</action> 
     <title>Die Schaltzentrale</title> 
    </dashboard> 
    <user> 
     <label>User</label> 
     <module>default</module> 
     <controller>user</controller> 
     <action>index</action> 
     <title>Verwaltung der Benutzer</title> 
     <pages> 
      <userList> 
       <module>default</module> 
       <controller>user</controller> 
       <action>index</action> 
       <label>Userliste anzeigen</label> 
      </userList>     
      <newUser> 
       <label>User anlegen</label> 
       <module>default</module> 
       <controller>user</controller> 
       <action>new</action> 
      </newUser> 
      <editUser> 
       <label>User bearbeiten</label> 
       <module>default</module> 
       <controller>user</controller> 
       <action>edit</action> 
      </editUser> 
     </pages> 
    </user> 
</nav> 
</configdata> 
+0

感谢您的回答。我在本教程中找到了findOneBy('controller')方法[link](http://www.brandonsavage.net/making-zend_navigation-useful/)。如果我搜索标签而不是控制器,我实际上会获得输出。但我只能看到主菜单。在我看来,Zend并没有正确读入XML结构。 – Benni 2012-04-24 18:38:28

+0

这可能是xml错误。我已经更新了我的答案。请尝试修改后的xml。 – 2012-04-25 09:02:07

+0

随着你的建议,我能够获得输出。但我仍然有一个问题。比方说,我有另一个控制器称为“设备”与另外两页。如果我现在渲染我的子菜单,我会得到一个包含所有页面的菜单,其深度为1。但没有被特定的控制器分开。所以我得到一个包含用户和设备所有链接的菜单,尽管我搜索了一个特定的标签。在我看来,我的XML仍然有问题。 – Benni 2012-04-25 12:37:32