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 个插件,分别称为 PartnersProperties

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'); 这是从左侧栏的列表中设置为默认选择的菜单。

希望这对您有所帮助。