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选项获得输出而没有任何成功。有没有人对我有所帮助,我如何才能使它起作用?
感谢您的回答。我在本教程中找到了findOneBy('controller')方法[link](http://www.brandonsavage.net/making-zend_navigation-useful/)。如果我搜索标签而不是控制器,我实际上会获得输出。但我只能看到主菜单。在我看来,Zend并没有正确读入XML结构。 – Benni 2012-04-24 18:38:28
这可能是xml错误。我已经更新了我的答案。请尝试修改后的xml。 – 2012-04-25 09:02:07
随着你的建议,我能够获得输出。但我仍然有一个问题。比方说,我有另一个控制器称为“设备”与另外两页。如果我现在渲染我的子菜单,我会得到一个包含所有页面的菜单,其深度为1。但没有被特定的控制器分开。所以我得到一个包含用户和设备所有链接的菜单,尽管我搜索了一个特定的标签。在我看来,我的XML仍然有问题。 – Benni 2012-04-25 12:37:32