Zend_Navigation渲染子菜单有部分

时间:2012-10-15 23:21:11

标签: zend-framework zend-navigation

我发布了一个编辑问题。在研究它时,我注意到问题很容易简化。 我需要我的子菜单的自定义格式,所以我必须使用部分。但问题就出现了。

以下代码显示INCORRECT级别(0):

            echo $this->navigation()->menu()
                ->setMinDepth(1)
                ->setMaxDepth(1)
                ->setRenderParents(false)
                ->setOnlyActiveBranch(true)
                ->renderPartial(null, array('partials/menu.phtml', 'default'));

以下代码显示了CORRECT菜单级别(1)

            echo $this->navigation()->menu()
                ->setMinDepth(1)
                ->setMaxDepth(1)
                ->setRenderParents(false)
                ->setOnlyActiveBranch(true)
                ->render();

有什么想法吗?伙计们请。我将不胜感激任何帮助!

修改

我的部分/ menu.phtml:

    foreach ($this->container as $page) 
{
    $active = $page->isActive();
    echo '<div class="item">';
        echo '<a class="'. ($active ? 'active' : '') .'" href="' . $this->baseUrl($page->getHref()) . '">' . $page->getLabel() . '</a>';
    echo '</div>';
}

编辑2

我对Zend_Navigation的理解是,首先准备容器而不是通过部分容器。

            $nav = $this->navigation()->menu()->setOnlyActiveBranch(true)->getContainer();
        echo $this->navigation()->menu()->renderPartial($nav, array('/partials/menu.phtml', 'default'));

设置{Min / Max} Depth的重点是什么,在传递容器时parentRendering在任何地方都没用?

3 个答案:

答案 0 :(得分:1)

我使用此代码:

<?=$this->navigation()->menu()->renderPartial(null, 'shared/menu.phtml')?>

您应该将true传递给方法$page->isActive(true),以便深入了解。

在您的部分

foreach ($this->container as $page) {
  $active = $page->isActive(true);
  if (count($page->getPages())) {
    foreach ($page->getPages() as $subPage) {
      $active = $subPage->isActive(true);
      echo '<div class="item">';
        echo '<a class="'. ($active ? 'active' : '') .'" href="' . $this->baseUrl($subPage->getHref()) . '">' . $subPage->getLabel() . '</a>';
      echo '</div>';      
    }
  }
}

在第二个foreach之前,你可以添加一个检查是否以及何时显示子菜单。

我的2美分。

修改

试试这个:

$partial = array('partials/menu.phtml', 'default');
echo $this->navigation()->menu()
  ->setMinDepth(1)
  ->setMaxDepth(1)
  ->setRenderParents(false)
  ->setOnlyActiveBranch(true)
  ->setPartial($partial)
  ->render();

答案 1 :(得分:0)

在搜索同一问题的答案时遇到了这个问题。浏览了Zend_View_Helper_Navigation_Menu的代码之后,它看起来并不像任何视图助手选项传递给视图部分,虽然我不明白为什么它们不能......(在ZF 1.12中看看Zend_View_Helper_Navigation_Menu的第736行,唯一传递的是容器本身,options数组可以很容易地与它一起传递,或者容器预过滤,可能值得用ZF提交功能请求)

这些选项纯粹是一种过滤Zend_Navigation_Container以使用默认renderMenu方法进行渲染的方法。正如你所说,似乎你可以通过先过滤容器然后将其作为renderPartial方法的第一个参数传递

来完成同样的事情。

答案 2 :(得分:0)

在您的主视图中

找到位于导航配置中的子菜单的容器。然后使用所述部分回显此容器。

$pages = $this->navigation()->findOneBy('label', 'Label of your submenu');
echo $this->navigation()->menu()->renderPartial($pages,module/partials/menu.phtml');

在partial(module / partials / menu.phtml)

定制。此示例迭代所选容器的顶级页面。

foreach ($this->container as $page) {
 echo $this->navigation()->menu()->htmlify($page) . PHP_EOL;
}