我在一个地方渲染Zend Navigation对象的顶级元素,如下所示:
echo $this->navigation()->menu()->setMaxDepth(0);
如何从活动分支的第二级渲染导航树?我已经尝试创建一个循环$this->container
对象的部分,但我不知道如何确定我当前的项是否是活动分支。一旦我确定它是活动分支,我该如何渲染菜单?我这么做的很难,并且遗漏了一些明显的东西吗?
谢谢!
更新
我接受了一个解决方案,因为这是我使用的,但我也想提供我的实际问题的答案,以供参考。 ($this
是视图对象)
// Find the active branch, at a depth of one
$branch = $this->navigation()->findActive($this->nav, 1, 1);
if (0 == count($branch)) {
// no active branch, find the default branch
$pages = $this->nav->findById('default-branch')->getPages();
} else {
$pages = $branch['page']->getPages();
}
$this->subNav = new Zend_Navigation($pages);
然后可以使用 $this->subNav
来渲染子菜单。
答案 0 :(得分:5)
如果我的问题是对的,我就是这样做的:
print $this->navigation()->menu()->renderMenu(null, array(
'minDepth' => 1,
'maxDepth' => 1,
'onlyActiveBranch' => true,
'renderParents' => false));
仅渲染当前活动菜单的子菜单。
答案 1 :(得分:4)
我做了类似的事情。我的主导航处理是这样的......
$this->navigation()->menu()->setPartial('tabs.phtml');
echo $this->navigation()->menu()->render();
然后在我的tabs.phtml中迭代容器就像这样......
if (count($this->container)) {
foreach($this->container as $page) {
if ($page->isVisible()) {
if ($page->isActive(true)) {
$subcontainer = $page->getPages();
foreach($subcontainer as $subpage) {
// echo my link
}
}
}
}
}
我希望有所帮助。
答案 2 :(得分:0)
我是这样做的:
<?php
// Render top-level elements
echo $this->navigation()->menu()->setMaxDepth(0);
// Render 2nd level elements for active element
echo $this->navigation()->menu()
->setOnlyActiveBranch(true)
->setRenderParents(false)
->setMinDepth(1);
?>
但这不是一个好的解决方案。每个级别更好一个单独的菜单:
<!-- level 1 -->
<?php echo $this->navigation()->menu()->setMaxDepth(0); ?>
<!-- level 2 -->
<?php echo $this->navigation()->menu()->setOnlyActiveBranch(true)->setRenderParents(true)->setMinDepth(1)->setMaxDepth(1); ?>
<!-- level 3 -->
<?php echo $this->navigation()->menu()->setOnlyActiveBranch(true)->setRenderParents(false)->setMinDepth(2)->setMaxDepth(2); ?>