2013-04-16 21 views
0

我正在爲具有4種不同訪問級別的網站(訪客,成員1,成員2和管理員)組建一個Zend導航。Zend導航查找頁面和渲染菜單及其子頁面

我的導航XML看起來是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
    <nav> 
     <default> 
      <label>Home</label> 
      <controller>index</controller> 
      <action>index</action> 
      <resource>index</resource> 
      <privilege>index</privilege> 

      <pages> 
       <home> 
        ... 
       </home> 
       <signin> 
        ... 
       </signin> 
       <signup> 
        ... 
       </signup> 
      </pages> 
     </default> 

     <member1> 
      <label>Member1 Main</label> 
      <controller>member1</controller> 
      <action>index</action> 
      <resource>member1</resource> 
      <privilege>index</privilege> 

      <pages> 
       <dashboard> 
        ... 
       </dashboard> 
       <settings> 
        <label>Settings</label> 
        <controller>auth</controller> 
        <action>editpassword</action> 
        <resource>auth</resource> 
        <privilege>editpassword</privilege> 
        <class>settings</class> 
        <title>User settings</title> 

        <pages> 
         <account> 
          ... 
         </account> 
         <logout> 
          ... 
         </logout> 
        </pages> 
       </settings> 
      </pages> 
     </member1> 

     <member2> 
      <label>Member2 Main</label> 
      <controller>member2</controller> 
      <action>index</action> 
      <resource>member2</resource> 
      <privilege>index</privilege> 

      <pages> 
       <dashboard> 
        ... 
       </dashboard> 
       <profile> 
        ... 
       </profile> 
       <settings> 
        <label>Settings</label> 
        <controller>auth</controller> 
        <action>editpassword</action> 
        <resource>auth</resource> 
        <privilege>editpassword</privilege> 
        <class>settings</class> 

        <pages> 
         <account> 
          ... 
         </account> 
         <logout> 
          ... 
         </logout> 
        </pages> 
       </settings> 
      </pages> 
     </member2> 

     <admin> 
      <label>Dashboard</label> 
      <controller>admin</controller> 
      <action>index</action> 
      <resource>admin</resource> 
      <privilege>index</privilege> 

      <pages> 
       <dashboard> 
        ... 
       </dashboard> 
       <logout> 
        ... 
       </logout> 
      </pages> 
     </admin> 

    </nav> 
</config> 

由於我使用的子菜單,並想爲頂部菜單的一致性,我想使用Zend的findBy功能來查找當前用戶的狀態和顯示菜單。這樣做是這樣:

if ($this->user) { 
    $submenu = $this->navigation()->findOneByLabel('Member1 Main'); 
    $options = array(
     'ulClass'    => 'navigation', 
     'renderParents'   => true, 
     'minDepth'    => null, 
     'maxDepth'    => null 
    ); 
    echo $this->navigation()->menu()->renderMenu($submenu, $options); 
} else { 
    echo $this->navigation()->menu()->setUlClass('navigation')->setOnlyActiveBranch(true)->setMinDepth(1)->setMaxDepth(1); 
} 

我的引導位爲導航是非常通用的,看起來是這樣的:

function _initNavigation() 
{ 
    $this->bootstrap('layout'); 
    $layout = $this->getResource('layout'); 
    $view = $layout->getView(); 

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

    $front  = Zend_Controller_Front::getInstance(); 
    $myPlagin = $front->getPlugin('My_Controller_Plugin_Acl'); 

    $view->navigation($navigation)->setAcl($myPlagin->getMyAcl()) 
           ->setRole($myPlagin->getMyUserRole()); 
} 

現在,我可以得到「的member1主」頁面出現,但只有它顯示一個頁面,但我需要呈現的是該頁面的整個子菜單。看起來findOneByLabel只查找該特定頁面而不查找其後代。有沒有辦法拉動整個子菜單?

謝謝。

+1

也許'findAllBy' – RockyFord

+0

您可以添加預期結果的屏幕截圖嗎?我不確定你想完成什麼。 –

回答

0

原來我不得不使用findAllByLabel來獲得預期的結果。謝謝@RockyFord