2

我在一个地方渲染 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然后可以用来渲染子菜单。

4

3 回答 3

5

如果我的问题是正确的,我就是这样做的:

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

仅呈现当前活动菜单的子菜单。

于 2011-04-01T15:19:29.030 回答
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
        }
      }
    }
  }
}

我希望这会有所帮助。

于 2010-08-20T01:32:41.083 回答
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); ?>
于 2011-12-16T19:28:46.413 回答