OctoberCMS 后端主菜单包含不同插件的子菜单
OctoberCMS backend main menu having sub menus of different plugins into it
我在 OctoberCMS 中有一个要求,我想实现后端(管理端),下面是我想要实现的。
我正在使用 Builder Plugin 并且我已经创建了很多插件,这些插件显示在 header 的顶部,它们各自的名称和管理(后端)中的链接。如果我点击它,我可以做任何我想做的事情(CRUD 操作),这对所有这些插件都很好。
但现在我只想要一个主菜单(例如 - “Plugins”),如果我点击它或将鼠标悬停在它上面,我应该能够看到我将添加的所有列出的插件,如果我创建更多,将来可以添加。
我应该能够在悬停或左侧看到那些插件链接,并且它应该能够 add/remove 这些链接。
目前我正在尝试在构建器插件 后端菜单 中执行此操作,但我无法这样做,因为它与 code[=27= 一直冲突] 那些菜单选项卡的字段。因此,如果我能实施的话,我现在期待着其他方式。
有人可以指导我如何实现吗?
您可以通过在您的插件中创建一个 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
好的,伙计们,最终,我成功了。这是我在下面所做的
例如,我有 2 个插件,分别称为 Partners 和 Properties。
在 Partners 插件中,我在 Plugin.php 文件中编写了类似的代码。
plugins\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.*']
],
]
]
];
}
在这里,正如您在上面看到的,我的 header 菜单 link 将根据我的要求和左侧栏菜单重定向到 Properties 插件,我的第一个 link 也将被重定向到 Properties 插件,下一个子菜单 link 将被重定向到 Partners 插件.
然后我转到合作伙伴控制器并输入如下代码。
plugins\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 操作或其他地方时能够显示它.
我为 Properties 插件做了类似的事情,以便能够在 Properties 插件中显示菜单。这就是我的代码的样子。
plugins\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');
这是从左侧栏的列表中设置为默认选择的菜单。
希望这对您有所帮助。
我在 OctoberCMS 中有一个要求,我想实现后端(管理端),下面是我想要实现的。
我正在使用 Builder Plugin 并且我已经创建了很多插件,这些插件显示在 header 的顶部,它们各自的名称和管理(后端)中的链接。如果我点击它,我可以做任何我想做的事情(CRUD 操作),这对所有这些插件都很好。
但现在我只想要一个主菜单(例如 - “Plugins”),如果我点击它或将鼠标悬停在它上面,我应该能够看到我将添加的所有列出的插件,如果我创建更多,将来可以添加。
我应该能够在悬停或左侧看到那些插件链接,并且它应该能够 add/remove 这些链接。
目前我正在尝试在构建器插件 后端菜单 中执行此操作,但我无法这样做,因为它与 code[=27= 一直冲突] 那些菜单选项卡的字段。因此,如果我能实施的话,我现在期待着其他方式。
有人可以指导我如何实现吗?
您可以通过在您的插件中创建一个 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
好的,伙计们,最终,我成功了。这是我在下面所做的
例如,我有 2 个插件,分别称为 Partners 和 Properties。
在 Partners 插件中,我在 Plugin.php 文件中编写了类似的代码。
plugins\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.*']
],
]
]
];
}
在这里,正如您在上面看到的,我的 header 菜单 link 将根据我的要求和左侧栏菜单重定向到 Properties 插件,我的第一个 link 也将被重定向到 Properties 插件,下一个子菜单 link 将被重定向到 Partners 插件.
然后我转到合作伙伴控制器并输入如下代码。
plugins\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 操作或其他地方时能够显示它.
我为 Properties 插件做了类似的事情,以便能够在 Properties 插件中显示菜单。这就是我的代码的样子。
plugins\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');
这是从左侧栏的列表中设置为默认选择的菜单。
希望这对您有所帮助。