Как добавить div в KnpMenu (Symfony2.1)

Я хотел бы сделать раскрывающийся список всякий раз, когда кто-то наводит курсор на кнопку меню, я создаю меню с помощью KnpMenuBundle.

Я хотел бы получить такую ​​​​структуру:

<lu>
    <li><a>...</a></li>
    <li>
        <a>...</a>
        <div>...</div>
    </li>
    <li><a>...</a></li>
<lu>

Если возможно, я хотел бы сделать контроллер изнутри div.

Можно ли это сделать?

Если я что-то пропустил в документации, дайте ссылку, потому что я искал несколько часов...


person Mats Rietdijk    schedule 10.09.2012    source источник


Ответы (1)


Это можно сделать, и я когда-то делал именно это, но нужно ли делать подобные вещи с помощью KnpMenuBundle, я не слишком уверен! Во всяком случае, я добился этого, определив свой класс MenuBuilder как службу и внедрив службу @templating. Это не вызывает действие контроллера, как вы упомянули, но позволяет отображать любой шаблон, который вы хотите...

/**
 * @param Request $request
 * @return \Knp\Menu\ItemInterface
 */
protected function createUserMenuLoggedOut(Request $request)
{
    $menu = $this->factory->createItem('root');

    $signInItem = $menu->addChild('Sign in', array('route' => 'fos_user_security_login'));
    $signInItem
        ->setLinkAttributes(array(
            'id' => 'sign-in-link',
            'class' => 'dropdown-toggle',
            'data-toggle' => 'dropdown',
            'data-target' => '#signin'
        ))
        ->setAttributes(array(
            'id' => 'signin',
            'class' => 'dropdown'
        ))
    ;

    // THIS IS THE LINE YOU'RE INTERESTED IN
    $signInItem->addChild($this->templating->render('ApplicationSonataUserBundle:Security:login_options.html.twig'));

    // more menu items...

    return $menu;
}

Если я правильно помню, я думаю, что это закончилось тем, что шаблон был заключен в дополнительный <ul>...</ul>, но это не вызвало особых проблем после небольшого стиля.

person RobMasters    schedule 10.09.2012
comment
Спасибо попробую щас. Также я только что нашел это: пример github, может быть полезен для других. А если этого делать не надо KnpMenuBundle что вы используете для своих меню? - person Mats Rietdijk; 11.09.2012
comment
Это был бы пример, когда я буду использовать KnpMenuBundle, потому что он отображает подменю (например, <ul><li>Parent<ul><li>Child 1</li><li>Child 2</li></ul></li><!-- more top-level menu items... --></ul>) для пункта меню верхнего уровня. Если мне приходится слишком много взламывать меню, чтобы контролировать вывод HTML, я просто делаю его из хороших, старомодных шаблонов веток. - person RobMasters; 11.09.2012