symfony2 では、上記のように、指定されたメニューの子を Controller または Template でアクティブなステータスとして設定したいのですが、どうすればそれを達成できますか? つまり、複数のルート (コントローラー アクション、テンプレート) を 1 つのメニューの子にマップしたいのですが、それは可能ですか? コントローラーまたはテンプレートでメニューを取得して、アクティブに設定できると思います。
6801 次
1 に答える
5
KNPMenuBundleを使用する場合、これは既に実装されています。クラスはfirst
last
およびcurrent
要素に対して自動的に生成されます。
メニューは自動的に次のようになります。
<ul>
<li class="first">
<a href="/whatever1">Menu Level 1</a>
</li>
<li class="current">
<a href="/whatever2">Menu Level 2</a>
</li>
<li class="last">
<a href="/whatever3">Menu Level 3</a>
</li>
</ul>
Menu builder を次のように使用すると仮定します。
//src/Acme/YourBundle/Menu/MenuBuilder.php
public function createSimpleMenu(Request $request)
{
$menu = $this->factory->createItem('root');
$menu->setCurrentUri($request->getRequestUri());
$menu->addChild('Menu Level 1', array('route' => '_route_whatever1'));
$menu->addChild('Menu Level 2', array('route' => '_route_whatever2'));
$menu->addChild('Menu Level 3', array('route' => '_route_whatever3'));
return $menu;
}
current
したがって、css をの代わりに適用する必要がありますactive
。ご覧のとおり、ジョブは によって実現され$menu->setCurrentUri($request->getRequestUri());
ます。
メニューを手動でカスタマイズしたい場合 (あなたの場合、同じ要素にマップする複数のルートが必要な場合)、switch ステートメントを使用できます。
//src/Acme/YourBundle/Menu/MenuBuilder.php
public function createSimpleMenu(Request $request)
{
// YOUR MENU AS USUAL FIRST
// ...
// A SWITCH IF YOU WISH TO CUSTOMIZE MANUALLY
switch($request->get('_route')) {
case "_route_whatever1bis":
$menu['Menu Level 1']->setCurrent(true);
break;
case "_route_whatever2bis":
$menu['Menu Level 2']->setCurrent(true);
break;
case "_route_whatever3bis":
$menu['Menu Level 3']->setCurrent(true);
break;
}
return $menu;
}
注: KNP メニュー バンドルがメニューをレンダリングする方法をカスタマイズするには、 をオーバーライドしますknp_menu.html.twig
。手順はこちらでご覧いただけます。
于 2012-07-10T08:12:53.757 に答える