1

我在 OctoberCMS 中有一个要求,我想实现后端(管理端),下面是我想实现的。

我正在使用Builder Plugin并且我已经创建了很多插件,这些插件显示在标题顶部,它们各自的名称和链接在管理(后端)中。如果我点击它,我可以做任何我想做的事情(CRUD 操作),这对所有这些插件都很好。

但是现在我只想要一个主菜单(例如 - “插件”),如果我点击它或将鼠标悬停在它上面,我应该能够看到我将添加的所有列出的插件,并且将来可以添加如果我创造更多。

我应该能够在悬停或左侧看到这些插件链接,并且它应该能够添加/删除这些链接。

目前我正在尝试在构建器插件后端菜单中执行此操作,但我无法这样做,因为它与那些菜单选项卡的代码字段保持冲突。因此,如果我可以实施,我现在期待其他方式。

有人可以指导我如何实现这一目标吗?

4

2 回答 2

1

您可以通过在插件中创建 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

于 2017-04-20T07:17:08.613 回答
1

好的,伙计们,最终,我能够使它工作。这就是我在下面所做的

例如,我有 2 个名为PartnersProperties的插件。

合作伙伴插件中,我在我的Plugin.php文件中编写了类似的代码。

插件\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.*']

                    ], 
                     ]
            ]
        ];
    }

在这里,正如您在上面看到的,我的标题菜单链接将根据我的要求重定向到属性插件,对于左侧栏菜单,我的第一个链接也将重定向到属性插件,下一个子菜单链接将重定向到合作伙伴插件。

然后我去了合作伙伴控制器并输入如下代码。

插件\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插件中显示菜单。这就是我的代码的样子。

插件\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');

最后一个参数与我们在合作伙伴插件中的参数不同。 BackendMenu::setContext('Technobrave.Partners', 'modules', 'properties'); 这是从左侧边栏的列表中设置为默认选择的菜单。

希望这可以帮助。

于 2017-08-08T05:30:37.787 回答