我要问的是与此issue相似,但尚未解决。
我正在尝试创建一个好的子菜单解决方案,但我似乎无法让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
)
);
当我导航到'admin'时,我看不到子菜单。如果我将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
的孩子在子菜单中渲染。有谁知道如何解决这个问题?
答案 0 :(得分:2)
在布局中,在renderMenu
方法中,renderParents
属性应设置为false
echo $this->navigation()->menu()->renderMenu(
null,
array(
'minDepth' => 2,
'maxDepth' => 2,
'onlyActiveBranch' => true,
'renderParents' => false
)
);
答案 1 :(得分:0)
我知道这是一个古老的问题,但对于一些人来说,这仍然是有意义的。在ZF2中,它可以使用以下方式与ZF1中相同:
echo $this->navigation()->menu()->renderSubMenu();