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

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

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

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

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

В настоящее время я пытаюсь сделать это в бэкэнд-меню плагина Builder, но я не могу этого сделать, так как он продолжает конфликтовать с полем кода для этой вкладки меню. Поэтому сейчас я с нетерпением жду другого пути, если смогу реализовать.

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

2 ответа

Решение

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

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

В подключаемом модуле "Партнеры" я написал нечто подобное в моем файле Plugin.php.

плагины \technobrave\ Партнеры \ 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.*']

                    ], 
                     ]
            ]
        ];
    }

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

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

плагины \technobrave\ партнеры \ Контроллеры \ 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, или где-то еще.

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

плагины \technobrave\ свойства \ Контроллеры \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'); Это должно установить как выбранное по умолчанию меню из списка на левой боковой панели.

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

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

Освободите от https://github.com/scottbedard/blogtags/blob/master/Plugin.php

    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

Другие вопросы по тегам