Zend框架2导航子子菜单
问题描述:
说我有以下导航:Zend框架2导航子子菜单
Home
Internal
Folders
New Folder
Configuration
Categories
New
Tags
New
Options
New
Contact
External
我在layout.phtml使用的代码显示菜单:
$internal = $this->navigation('navigation')->findOneByLabel('Internal');
echo $this->navigation('navigation')
->menu()
->setUlClass('nav nav-list')
->setMaxDepth(1)
->renderMenu($internal);
因此它显示像这样:
Folders
New Folder
Configuration
Categories
Tags
Options
Contact
在我得到一个体面的菜单,显示所有的家长和孩子的第一个瞬间,让“新” naviga重刑永远不会显示。
但是,如果我在页面上“类别”我想展示自己孩子的太多,所以“新建”下的“类别”应显示,如下所示:
Folders
New Folder
Configuration
Categories
New
Tags
Options
Contact
我尝试了很多方法来尝试这一点,并且已经检查了所有可以在layout.phtml中给菜单的选项(setMinDepth,setMaxDepth,renderSubMenu,setParentMenu),而没有成功。它可以是包含或不包含的“新”,也不是介于两者之间的东西。
关于ZF2的文档没有给我任何关于如何让这个子菜单工作,除了做一个部分。
那么,是否只是部分唯一的选择呢?
在此先感谢!
答
前段时间对于一个小项目,我做了一些很快的修复。我们一直在计划清理代码并使其可配置,但我们从未到达另一个需要相同代码的项目。
TL; DR:你不能使用正常的zf2视图助手,但你必须查找你想要显示的“顶层”页面(在你的情况下是内部的)并显示该页面下面的菜单。
<?php
namespace Application\View\Helper;
use Zend\View\Helper\AbstractHelper;
class SubNavigation extends AbstractHelper
{
public function __invoke($class = null)
{
$view = $this->getView();
$menu = $view->navigation()->menu();
$container = $view->navigation()->getContainer();
$active = $view->navigation()->setRenderInvisible(true)->findActive($container);
if (!$active) {
return;
}
$container = $active['page'];
$depth = $active['depth'];
while (0 !== $depth) {
$container = $container->getParent();
$depth--;
}
$visible = $container->isVisible();
$html = $menu->setContainer($container->setVisible(true))
->setUlClass('')
->setOnlyActiveBranch(false)
->setMinDepth(null)
->setMaxDepth(null)
->render();
$container->setVisible($visible);
if (strlen($html)) {
return sprintf('<ul %s><li%s><a href="%s">%s</a>%s</li></ul>',
(null !== $class) ? ' class="' . $class . '"' : null,
($container->isActive())? ' class="active"' : null,
$container->getHref(),
$container->getLabel(),
$html);
}
}
}
这个视图助手致使“内部”作为sprintf()
呼叫的顶部菜单项,但你可以很容易地改变这种行为。你可以回显$html
,然后它就是你实际需要的。
谢谢,这有帮助! :) – Bananam00n 2013-04-22 11:02:27
仅供参考,我前几天在Soflomo \ Common图书馆收录了这个帮手。确保你至少依靠0.3.1:https://github.com/Soflomo/Common – 2013-04-23 14:22:27