我想为当前项目使用KnpMenu来处理我的导航树逻辑。我构建了一个菜单树,如下所示:
use Knp\Menu\Matcher\Matcher;
use Knp\Menu\MenuFactory;
use Knp\Menu\Renderer\ListRenderer;
$factory = new MenuFactory();
$menu = $factory->createItem('my_menu');
$menu->addChild('home', array('uri' => '/', 'label' => 'Home'))
->addChild('about', array('uri' => 'about', 'label' => 'About'));
$cat1 = $menu->addChild('category_1', array('uri' => 'category_1', 'label' => 'Category 1'));
$cat1_1 = $cat1->addChild('category_1_1', array('uri' => 'category_1_1', 'label' => 'Category 1.1'));
$cat1_1->addChild('category_1__1', array('uri' => 'category_1_1_1', 'label' => 'Category 1.1.1'));
$cat1_1->addChild('category_1_1_2', array('uri' => 'category_1_1_2', 'label' => 'Category 1.1.2'))->setCurrent(true);
$cat1->addChild('category_1_2', array('uri' => 'category_1_2', 'label' => 'Category 1.2'));
$renderer = new ListRenderer(new Matcher());
echo $renderer->render($menu);我想知道是否有可能渲染一个折叠的菜单树,其中只显示当前活动的菜单项。其他项目不应显示。在文档中,我还没有找到实现这一点的方法。
有谁有解决方案吗?
谢谢
发布于 2013-03-13 06:25:02
你的意思是,如果父菜单是活动的,你只想让菜单“展开”?
如果是,那么是的,我有同样的要求,这里有一个PR为它开放https://github.com/KnpLabs/KnpMenu/pull/85
目前,由于没有合并,我正在使用我的分支来替换composer中标记的KnpMenu。
//composer.json excerpt
...
"repositories": [
{
"type": "vcs",
"url": "git@github.com:catchamonkey/KnpMenu"
}
],
require: {
...
"knplabs/knp-menu": "dev-display_children_if_ancestor_current as 2.0.0",
...
}
...然后使用此行为标记顶级项,因此要使您的category_1仅在子项处于活动状态(或它处于活动状态)时才展开,您可以这样做
$cat1->setDisplayChildrenIfAncestorCurrent(true);这是由这里的细枝呈现的更改https://github.com/KnpLabs/KnpMenu/pull/85/files#L2R74处理的
https://stackoverflow.com/questions/15373343
复制相似问题