【问题标题】:Folded menu navigation with KnpMenu使用 KnpMenu 进行折叠菜单导航
【发布时间】:2013-03-12 22:17:57
【问题描述】:

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

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

有人有解决办法吗?

谢谢

【问题讨论】:

    标签: symfony menu tree navigation knpmenu


    【解决方案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

    【讨论】:

    • 您好,感谢您的快速答复。你理解正确,这正是我正在寻找的。我查看了您的 KnpMenu 分支。我不明白的是逻辑在哪里检查当前 MenuItem 是否将 displayChildrenIfAncestorCurrent 设置为 true 并决定是否应该显示该项目。
    • @user1036651 我已经更新了示例及其使用位置。
    • 我不在 Symfony2 上下文中使用 Knpmenu,因此不使用 twig。但是,无论是否显示孩子的逻辑都不应该在 MenuItem 类中吗?当“DisplayChildren”设置为 false 时,类决定不显示子项的方式相同?
    • 是的,我想链条越往上越好,我的 PR 促使一些讨论以不同的方式完成,但到目前为止我们还没有到达那里,所以我没有进一步改变它,但正如你所说,应该很容易。
    • 好的,非常感谢您的帮助。我会补充缺失的部分!
    猜你喜欢
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 2018-08-23
    • 2016-07-13
    • 2018-12-14
    • 2020-12-17
    • 2018-04-18
    • 1970-01-01
    相关资源
    最近更新 更多