2
使用Symfony 3.1和KNP菜單包我構建了2級菜單樹。KNP菜單 - 突出顯示父菜單
所選頁面在菜單中突出顯示。 當我使用下拉菜單時,我還想讓頂層菜單高亮顯示 - 基本上是我選擇的孩子的父項。
不知道如何實現這一點。 Docs目前沒有幫助。任何幫助讚賞。 感謝Wolfram
使用Symfony 3.1和KNP菜單包我構建了2級菜單樹。KNP菜單 - 突出顯示父菜單
所選頁面在菜單中突出顯示。 當我使用下拉菜單時,我還想讓頂層菜單高亮顯示 - 基本上是我選擇的孩子的父項。
不知道如何實現這一點。 Docs目前沒有幫助。任何幫助讚賞。 感謝Wolfram
現在已經很晚了,我想你已經找到了方法,但如果有人仍在尋找它,我會給出我的答案。
基本上你可以通過setCurrent()
方法實現這一點。例如,我想用我目前的路線檢查它。所以,我所做的是,
新增request_stack
在我的生成器服務。所以,我的服務一直在尋找像
app.menu_builder:
class: MyBundle\Menu\MenuBuilder
arguments: ["@knp_menu.factory", "@security.authorization_checker", '@request_stack']
tags:
- { name: knp_menu.menu_builder, method: createSideMenu, alias: side }
現在我使用MenuBuilder類的構造函數部分一直在尋找像
use Knp\Menu\FactoryInterface;
use Symfony\Component\Translation\TranslatorInterface;
use Symfony\Component\HttpFoundation\RequestStack;
class MenuBuilder
{
/**
* @var FactoryInterface
*/
private $factory;
/**
* @var TranslatorInterface
*/
private $translator;
/**
* @var RequestStack
*/
private $requestStack;
/**
* MenuBuilder constructor.
* @param FactoryInterface $factory
* @param TranslatorInterface $translator
*/
public function __construct(
FactoryInterface $factory,
TranslatorInterface $translator,
RequestStack $requestStack
) {
$this->factory = $factory;
$this->translator = $translator;
$this->requestStack = $requestStack;
$this->prefix = $requestStack->getCurrentRequest()->get('_prefix');
}
}
然後,我建立了我的菜單,例如:
$menu->addChild('level1_1', array(
'label' => "<span>Committee</span>",
'uri' => '#',
'extras' => array('safe_label' => true)
));
$menu['level1_1']->addChild('level2_1', array(
'label' => "<span>Level 2 Number 1</span>",
'route' => 'route_1',
'extras' => array('safe_label' => true)
));
$menu['level1_1']->addChild('level2_2', array(
'label' => "<span>Level 2 Number 2</span>",
'route' => 'route_2',
'extras' => array('safe_label' => true)
));
$menu->addChild('level1_2', array(
'label' => "<span>Committee</span>",
'uri' => '#',
'extras' => array('safe_label' => true)
));
$menu['level1_2']->addChild('level2_3', array(
'label' => "<span>Level 2 Number 3</span>",
'route' => 'route_3',
'extras' => array('safe_label' => true)
));
$menu['level1_2']->addChild('level2_4', array(
'label' => "<span>Level 2 Number 4</span>",
'route' => 'route_4',
'extras' => array('safe_label' => true)
));
現在是主要部分。在菜單對象爲我準備好之後,我將路由與其父項進行映射,並在返回菜單對象之前將父項設置爲活動狀態。
$request = $this->requestStack->getCurrentRequest();
$routeName = $request->get('_route');
switch ($routeName)
{
case 'route_1':
case 'route_2':
$menu['level1_1']->setCurrent(true);
break;
case 'route_3':
case 'route_4':
$menu['level1_2']->setCurrent(true);
break;
}
代替此開關部分,你可以根據自己的需要使用自己的登錄。希望這足以讓人明白。