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