2011-11-03 62 views
0

我在問的是類似於這個issue,它仍然沒有解決。使用Zend渲染活動分支的子項導航視圖幫助

我想創建一個好的子菜單解決方案,但我似乎無法得到Zend_View_Helper_Navigation_Menu與我一起工作。

這裏是我的XML導航配置:

<configdata> 
    <nav> 
     <index> 
      <label>Index</label> 
      <uri>/</uri> 
      <pages> 

       <home> 
        <label>home</label> 
        <uri>/</uri> 
       </home> 

       <about> 
        <label>about</label> 
        <uri>/about</uri> 
       </about> 

       <works> 
        <label>works</label> 
        <uri>/works</uri> 
        <pages> 
         <music> 
          <label>music</label> 
          <uri>/works/music</uri> 
         </music> 
        </pages> 
       </works> 
       <posts> 
        <label>posts</label> 
        <uri>/posts</uri> 
       </posts>     
       <admin> 
        <label>admin</label> 
        <uri>/admin</uri> 
        <pages> 
         <login> 
          <label>log in</label> 
          <uri>/admin/login</uri> 
         </login> 
         <settings> 
          <label>settings</label> 
          <uri>/admin/settings</uri> 
         </settings> 
         <register> 
          <label>register</label> 
          <uri>/admin/register</uri> 
         </register> 
         <logout> 
          <label>log out</label> 
          <uri>/admin/logout</uri> 
         </logout> 
        </pages> 
       </admin> 

      </pages> 
     </index> 
    </nav> 
</configdata> 

這裏是我的佈局相關代碼:

echo $this->navigation()->menu()->renderMenu(
    null, 
    array(
     'minDepth' => 2, 
     'maxDepth' => 2, 
     'onlyActiveBranch' => true 
    ) 
); 

當我瀏覽到「管理」,我沒有看到子菜單。如果我將minDepth更改爲1,則可以看到該菜單及其子項在源中處於「活動」狀態。爲什麼當minDepth設置爲2時不會渲染它們?

我做了這樣的解決辦法,但我必須複製/粘貼到每個控制器,它的工作(因爲我需要請求對象爲了做到這一點):

$pages = $this->view->navigation()->current()->getPages(); 
    foreach ($pages as $page) { 
     $this->_setChildrenInvisible($page); 
    } 

_setChildrenInvisible()功能:

private function _setChildrenInvisible(Zend_Navigation_Container $container) { 
    foreach ($container as $child) { 
     if ($child->hasChildren()) { 
      $this->_setChildrenInvisible($child); 
     } 
     $child->setVisible(false); 
    } 
} 

我只是想讓admin的子女在子菜單中呈現。有誰知道如何解決這一問題?

回答

2

在佈局,在renderMenu法,renderParents屬性應該設置爲false

echo $this->navigation()->menu()->renderMenu(
    null, 
    array(
     'minDepth' => 2, 
     'maxDepth' => 2, 
     'onlyActiveBranch' => true, 
     'renderParents' => false 
    ) 
); 
0

我知道這是一個老問題,但它仍然是相關的一些人碰到這個絆腳石。在ZF2中,可以使用與ZF1相同的方式使用:

echo $this->navigation()->menu()->renderSubMenu();