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