0

我在OctoberCMS中有一个需求,我想实现后端(管理端),下面我要实现它。OctoberCMS后台主菜单中有不同插件的子菜单

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

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

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

目前,我想这样做的建设者插件后台菜单但我不能这样做,因为它是保持与代码发生冲突领域的菜单选项卡。因此,如果我能实施,我现在正以其他方式期待。

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

回答

0

OK伙计们,最终,我能够使它工作。这就是我下面

比方说做,我有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'); 这是设置为左侧边栏列表中的默认选定菜单。

希望这会有所帮助。

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') 
        ] 
       ]); 
      }); 
} 

要删除的菜单项可以使用

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

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

+0

嗨@MittulAtTechnoBrave你有没有设法解决有多个插件的一个菜单? – Nilan