1

我想为当前项目使用 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);

我想知道是否可以呈现一个仅显示当前活动菜单项的折叠菜单树。不应显示其他项目。在文档中,我还没有找到实现此目的的方法。

有没有人有办法解决吗?

谢谢

4

1 回答 1

1

你的意思是如果父母处于活动状态,你只想让菜单“展开”?
如果是这样,那么是的,我有同样的要求,这里有一个 PR 开放https://github.com/KnpLabs/KnpMenu/pull/85

目前由于它没有合并,我正在使用我的分支替换作曲家中标记的 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

于 2013-03-12T22:25:01.977 回答