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

現在、マージされていないため、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

于 2013-03-12T22:25:01.977 に答える