代码之家  ›  专栏  ›  技术社区  ›  Sonny

渲染Zend导航的活动分支(无顶层)

  •  2
  • Sonny  · 技术社区  · 14 年前

    我在这样一个地方呈现Zend导航对象的顶级元素:

    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 然后可用于呈现子菜单。

    3 回复  |  直到 13 年前
        1
  •  4
  •   allnightgrocery    14 年前

    我也做类似的事情。我的主导航是这样处理的…

    $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
  •  5
  •   Sejanus    13 年前

    如果我正确回答了你的问题,我就是这样做的:

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

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

        3
  •  0
  •   Thomas Szteliga    13 年前

    我这样做:

    <?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); ?>