2012-04-24 58 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