3

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

下面的代码显示了不正确的级别(0):

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

下面的代码显示了正确的菜单级别 (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'));

在容器中设置 set{Min/Max}Depth, parentRendering 的意义何在?

4

3 回答 3

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();
于 2012-10-16T09:19:25.847 回答
0

在寻找相同问题的答案时遇到了这个问题。查看 Zend_View_Helper_Navigation_Menu 的代码后,看起来任何视图助手选项都没有传递给视图部分,尽管我不明白为什么它们不能......(在 ZF 1.12 中看看Zend_View_Helper_Navigation_Menu 的第 736 行,唯一传递的是容器本身,选项数组可以很容易地与它一起传递,或者容器预过滤,可能值得向 ZF 提交功能请求)

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

于 2012-11-16T18:13:51.760 回答
0

在您的主视图中

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

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

在部分 (module/partials/menu.phtml)

定制。此示例遍历您选择的容器的顶级页面。

foreach ($this->container as $page) {
 echo $this->navigation()->menu()->htmlify($page) . PHP_EOL;
}
于 2015-08-09T20:29:54.883 回答