Укажите текущий маршрут или шаблон в качестве активной ссылки KnpMenu
В symfony2, как описано выше, я хочу установить указанный дочерний элемент меню в качестве активного состояния в Controller или Template, как я могу этого добиться? То есть я хочу, чтобы несколько маршрутов (действие контроллера, шаблон) отображались в одном дочернем меню, это возможно? Я думаю, я мог бы получить меню в контроллере или шаблон и установить его в активном.
1 ответ
Это уже реализовано при использовании 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>
Предполагая, что вы используете конструктор меню следующим образом:
//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;
}
Поэтому вам нужно применить CSS к current
вместо 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 Menu Bundle, переопределите knp_menu.html.twig
, Вы можете увидеть процедуру здесь.