Главное меню бэкэнда OctoberCMS с вложенными в него подменю различных плагинов

У меня есть одно требование в OctoberCMS, которое я хочу реализовать на стороне администратора (сторона администратора), и вот что я хочу реализовать.

Я использую плагин Builder, и я уже создал так много плагинов, которые отображаются в верхней части заголовок с соответствующими именами и ссылками в админке (бэкэнд). И если я нажму на нее, я могу делать все, что захочу (операция CRUD), которая отлично работает для всех этих плагинов.

Но теперь мне нужно только одно главное меню (скажем, например, «Плагины»), и если я нажму на него или наведу на него курсор, я смогу увидеть все перечисленные плагины, которые я добавлю. и могу добавить в будущем, если создам больше.

Я должен видеть эти ссылки плагина при наведении курсора или слева, и у него должна быть возможность добавлять / удалять эти ссылки.

В настоящее время я пытаюсь сделать это в подключаемом модуле конструктора backend menu, но я не могу этого сделать, поскольку он продолжает конфликтовать с полем code для этой вкладки меню. Следовательно, теперь я с нетерпением жду другого пути, если смогу его реализовать.

Может ли кто-нибудь посоветовать мне, как я могу этого добиться?


person Mittul At TechnoBrave    schedule 20.04.2017    source источник


Ответы (2)


Вы можете управлять меню, создав функцию boot () в своем плагине.

Пример из https://github.com/scottbedard/blogtags/blob/master/Plugin.php#L54

    class Plugin extends PluginBase
    {

        public function pluginDetails()
        {
            [..]
        }

        public function boot()
        {
            // extend the blog navigation
            Event::listen('backend.menu.extendItems', function($manager) {
               $manager->addSideMenuItems('RainLab.Blog', 'blog', [
                    'tags' => [
                        'label' => 'bedard.blogtags::lang.navigation.tags',
                        'icon'  => 'icon-tags',
                        'code'  => 'tags',
                        'owner' => 'RainLab.Blog',
                        'url'   => Backend::url('bedard/blogtags/tags')
                    ]
                ]);
            });
}

Чтобы удалить пункты меню, вы можете использовать

  • $ manager-> removeMainMenuItem ()
  • $ manager-> removeSideMenuItem ()

Документация по API для диспетчера навигации: https://octobercms.com/docs/api/backend/classes/navigationmanager

person Pierre-André Vullioud    schedule 20.04.2017
comment
Привет, @MittulAtTechnoBrave, удалось ли вам создать одно боковое меню для нескольких плагинов? - person Nilan; 06.08.2017

Хорошо, ребята, в конце концов, у меня все получилось. Это то, что я сделал ниже

Скажем, например, у меня есть 2 плагина, которые называются Партнеры и Свойства.

В плагине Partners я закодировал что-то подобное в моем файле Plugin.php.

плагины \ technobrave \ partners \ Plugin.php

<?php namespace Technobrave\Partners;

use System\Classes\PluginBase;
use Backend;
use Event;
class Plugin extends PluginBase
{

    public function registerNavigation()
    {
        return [
            'modules' => [
                'label'       => 'Modules',
                'url'         => Backend::url('technobrave/properties/properties'),
                'icon'        => 'icon-bars',
                'permissions' => ['Technobrave.Property.*'],

                'sideMenu'    => [
                    'properties' => [
                            'label' => 'Properties',
                            'icon'        => 'icon-home',
                            'url'         => Backend::url('technobrave/properties/properties'),
                            'permissions' => ['Technobrave.Property.*']
                    ],
                    'partner' => [
                            'label' => 'Partners',
                            'icon'        => 'icon-thumbs-up',
                            'url'         => Backend::url('technobrave/partners/partners'),
                            'permissions' => ['Technobrave.Partner.*']

                    ], 
                     ]
            ]
        ];
    }

Здесь, как вы можете видеть выше, моя ссылка меню заголовка будет перенаправлена ​​на плагин Свойства в соответствии с моими требованиями, а для меню левой боковой панели моя первая ссылка также будет перенаправлена ​​на Свойства плагин, и следующая ссылка в подменю будет перенаправлена ​​на плагин Партнеры.

Затем я перешел к контроллеру Partners и поместил код примерно так, как показано ниже.

плагины \ technobrave \ partners \ controllers \ Partners.php

<?php namespace Technobrave\Partners\Controllers;

use Backend\Classes\Controller;
use BackendMenu;

class Partners extends Controller
{
    public function __construct()
    {
        parent::__construct();             
        BackendMenu::setContext('Technobrave.Partners', 'modules', 'partner');        
    }
}

Здесь, как вы можете видеть, я только что выполнил меню в подключаемом модуле партнеров, чтобы иметь возможность отображать его, когда я нахожусь в списке партнеров, при операции CRUD или где-то еще.

То же самое я сделал для плагина Свойства, чтобы иметь возможность отображать меню в плагине Свойства. Так выглядит мой код.

плагины \ technobrave \ properties \ controllers \ Properties.php

<?php namespace Technobrave\Properties\Controllers;
use Backend\Classes\Controller;
use BackendMenu;
class Properties extends Controller
{
    public function __construct() {
        parent::__construct();       
        BackendMenu::setContext('Technobrave.Partners', 'modules', 'properties');
    }
}

Здесь в этом коде нужно отметить одну вещь BackendMenu::setContext('Technobrave.Partners', 'modules', 'properties');

Последний аргумент отличается от того, что мы добавили в плагин Partners. BackendMenu::setContext('Technobrave.Partners', 'modules', 'properties'); Используется для установки по умолчанию выбранного меню из списка на левой боковой панели.

Надеюсь это поможет.

person Mittul At TechnoBrave    schedule 08.08.2017