我发布了一个编辑问题。在研究它时,我注意到问题很容易简化。 我需要我的子菜单的自定义格式,所以我必须使用部分。但问题就出现了。
以下代码显示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在任何地方都没用?
答案 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;
}