2015-06-11 5 views
1

Я хотел бы вставить элементы меню, такие как дерево. У меня есть эта конфигурация в данный момент:Вложенные пункты меню на боковой панели SonataAdminBundle

dashboard: 
    groups: 
     company: 
      icon: <i class="fa fa-lg fa-fw fa fa-cogs"></i> 
      label: Company 
      items: 
       - sonata.admin.company 
       - sonata.admin.brand 
       - sonata.admin.media 
       - sonata.admin.message 
     territory: 
      icon: <i class="fa fa-lg fa-fw fa fa-cogs"></i> 
      label: Territory 
      items: 
       - sonata.admin.territory 
       - sonata.admin.target 
     reps: 
      icon: <i class="fa fa-lg fa-fw fa fa-cogs"></i> 
      label: Representative 
      items: 
       - sonata.admin.representative 
       - sonata.admin.email 
       - sonata.admin.targetbrand 
       - sonata.admin.territorybrand 

И я хотел бы иметь что-то вроде:

dashboard: 
    groups: 
     company: 
      icon: <i class="fa fa-lg fa-fw fa fa-cogs"></i> 
      label: Company 
      label_catalogue: PDOneBundle 
      items: 
       - sonata.admin.company 
        - sonata.admin.brand 
         - sonata.admin.media 
         - sonata.admin.message 
     territory: 
      icon: <i class="fa fa-lg fa-fw fa fa-cogs"></i> 
      label: Territory 
      label_catalogue: PDOneBundle 
      items: 
       - sonata.admin.territory 
        - sonata.admin.target 
     reps: 
      icon: <i class="fa fa-lg fa-fw fa fa-cogs"></i> 
      label: Representative 
      label_catalogue: PDOneBundle 
      items: 
       - sonata.admin.representative 
        - sonata.admin.email 

Как я могу сделать это? Возможно?

UPDATE

Основываясь на docs по SonataAdminBundle и по рекомендуемого @ Хьюго Бриана- я сделал некоторые изменения по extending the menu, так что я создал файл под PDI\PDOneBundle\EventListener\MenuBuilderListener.php и выглядит следующим образом:

namespace PDI\PDOneBundle\EventListener; 
use Sonata\AdminBundle\Event\ConfigureMenuEvent; 

class MenuBuilderListener 
{ 
    public function createMainMenu(ConfigureMenuEvent $event) 
    { 
     $menu = $event->getMenu(); 

      $menu 
       ->addChild('Dashboard', array('uri' => '/')) 
       ->setAttribute('icon', 'fa fa-home'); 

      $menu 
       ->addChild('Company', array()) 
       ->setAttribute('icon', 'fa fa-inbox') 
       ->addChild('Company', array(
        'route' => 'admin_pdi_pdone_company_list', 
       )) 
       ->setAttribute('icon', 'fa fa-inbox') 
       ->getParent() 
       ->addChild('Brand', array(
        'route' => 'admin_pdi_pdone_brand_list', 
       )) 
       ->setAttribute('icon', 'fa fa-inbox') 
       ->addChild('Media', array(
        'route' => 'admin_pdi_pdone_media_list', 
       )) 
       ->setAttribute('icon', 'fa fa-inbox') 
       ->getParent(); 
    } 
} 

Затем я зарегистрировал слушателя по адресу PDI\PDOneBundle\Resources\config\services.yml следующим образом:

services: 
    app.menu_listener: 
     class: PDI\PDOneBundle\EventListener\MenuBuilderListener 
     tags: 
      - { name: kernel.event_listener, event: sonata.admin.event.configure.menu.sidebar, method: createMainMenu } 

Но не работает с тех пор, пока по-прежнему отображается такое же меню по умолчанию. Любой совет?

ответ

1

Да, вы можете. Но не так точно, как вы это указали.

SonataAdmin теперь объединяет KnpMenu для создания бокового меню. Здесь задокументировано (https://sonata-project.org/bundles/admin/master/doc/cookbook/recipe_knp_menu.html); позаботьтесь о том, чтобы быть в главной версии, хотя это еще не выпущено как стабильная версия.

Примечание: поскольку документация еще не переиздана, некоторая информация отсутствует. Вы можете увидеть его непосредственно в репозитории Github: https://github.com/sonata-project/SonataAdminBundle/blob/41328b42f91bf4c72153cdb1fc2c50a5092c7755/Resources/doc/cookbook/recipe_knp_menu.rst

Для каждого элемента вашего меню вы можете теперь предоставить провайдера KnpMenu, который будет генерировать ваше меню, и переопределить связанный макет.

+0

Можете ли вы написать небольшой код, чтобы показать мне, как это сделать? Я нахожусь на хозяине, как вы сказали мне, но не совсем ясно, как вообще вложить меню. Я хочу, чтобы вложенные действия администратора по умолчанию не добавляли новую запись в меню, как? – ReynierPM

+0

@ReynierPM Я обновил свой ответ ссылкой, где все объяснено подробно; мой плохой о первом, я думал, что документация обновлена. –

+0

Можете ли вы взглянуть на мое редактирование? Это не работает для меня :-( – ReynierPM

Смежные вопросы