Symfony 3.1とKNPメニューバンドルでは、2レベルのメニューツリーを構築します。KNPメニュー - 親メニューを強調表示
選択したページがメニュー内で強調表示されます。 私はドロップダウンメニューを使用しているので、メニューのトップレベルが強調表示されるようにしたい - 基本的には選択した子の親エントリ。
これを達成する方法はありません。ドキュメントは今まで役に立たなかった。どんな助けもありがたい。 ありがとうWolfram
Symfony 3.1とKNPメニューバンドルでは、2レベルのメニューツリーを構築します。KNPメニュー - 親メニューを強調表示
選択したページがメニュー内で強調表示されます。 私はドロップダウンメニューを使用しているので、メニューのトップレベルが強調表示されるようにしたい - 基本的には選択した子の親エントリ。
これを達成する方法はありません。ドキュメントは今まで役に立たなかった。どんな助けもありがたい。 ありがとうWolfram
あなたはすでに方法を見つけたと思いますが、誰かがまだそれを探している場合は、私は答えを出しています。
基本的にはsetCurrent()
メソッドでこれを達成できます。たとえば、私は現在のルートでそれをチェックしたいと思っていました。だから、私がやったことは
、私のビルダーサービスで追加request_stack
ました。
$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)
));
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');
}
}
のようなものを探していた中でその後、私は例えば、私のメニューを作成し、コンストラクタの一部今
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 }
のようなものを探していました
今は主要な部分です。メニューオブジェクトの準備が整った後は、ルートを親にマップし、親をアクティブに設定してからメニューオブジェクトを返すようにしました。このスイッチ部の代わりに
$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;
}
、あなたのニーズに応じて独自のログインを使用することができます。これが理解できるほど明確であることを願っています。