Основное меню бэкэнда 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