У меня есть одно требование в OctoberCMS, которое я хочу реализовать в бэкэнде (на стороне администратора), и здесь ниже то, что я хочу реализовать.
я использую Плагин Builder и я уже создал так много плагинов, которые отображаются в верхней части заголовка с их соответствующими именами и ссылками в админке (бэкэнд). И если я нажимаю на нее, я могу делать все, что захочу (операция CRUD), которая прекрасно работает для всех этих плагинов.
Но теперь я хочу только одно главное меню (скажем, например — «Плагины«) и если я нажму на него или наведу на него, я должен увидеть все перечисленные плагины, которые я добавлю, и могу добавить в будущем, если я создам больше.
Я должен быть в состоянии видеть эти ссылки плагинов при наведении или на левой стороне, и он должен иметь возможность добавлять / удалять эти ссылки.
В настоящее время я пытаюсь сделать это в плагине Builder внутреннее меню но я не могу этого сделать, так как это противоречит код поле для этих вкладок меню. Поэтому сейчас я с нетерпением жду другого пути, если смогу реализовать.
Может ли кто-нибудь наставить меня, как мне этого добиться?
Вы можете управлять меню, создав функцию 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')
]
]);
});
}
Для удаления пунктов меню вы можете использовать
Документация по API для менеджера навигации: https://octobercms.com/docs/api/backend/classes/navigationmanager
Хорошо, ребята, в конце концов, я смог заставить его работать. Это то, что я сделал ниже
Скажем, например, у меня есть 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, или где-то еще.
Аналогичная вещь, которую я сделал для свойства плагин, чтобы иметь возможность показывать меню в свойства плагин. Вот так выглядит мой код.
плагины \ 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');
Последний аргумент отличается от того, что мы положили в партнеры плагин.
BackendMenu::setContext('Technobrave.Partners', 'modules', 'properties');
Это должно установить как выбранное по умолчанию меню из списка на левой боковой панели.
Надеюсь это поможет.