OctoberCMS后端主菜单,其中包含不同插件的子菜单

时间:2017-04-20 05:53:06

标签: php octobercms octobercms-plugins octobercms-backend octobercms-widgets

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以通过在插件中创建boot()函数来操作菜单。

例子来自 https://github.com/scottbedard/blogtags/blob/master/Plugin.php#L54

var something = row["item_no"];

要删除可以使用的菜单项

  • $ manager-> removeMainMenuItem()
  • $管理器 - > removeSideMenuItem()

导航管理器的API文档:https://octobercms.com/docs/api/backend/classes/navigationmanager

答案 1 :(得分:1)

好的家伙,最终,我能够让它发挥作用。这就是我在下面所做的

比如说,我有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.*']

                    ], 
                     ]
            ]
        ];
    }

此处,如上所示,我的标题菜单链接将根据我的要求重定向到属性插件,对于左侧栏菜单,我的第一个链接也将重定向到属性插件和下一个子菜单链接将重定向到合作伙伴插件。

然后我去了Partners控制器并输入如下代码。

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

希望这会有所帮助。