2016-10-22 96 views
0

我有一個非常基本的應用程序,它使用大部分功能的插件。我希望允許每個插件定義一些自定義菜單和菜單項,將所有這些菜單收集到一個地方(可能是AppController :: initialize),並創建一個數組,該數組將傳遞給main-menu.php元素,該元素將呈現完整的菜單。如何在插件中添加設置

我所做的到目前爲止是在插件

# plugins/TestPlugin/config/menus.php 

return [ 
    'menus' => [ 
     [ 
      'header' => 'TestPlugin', 
      [ 
       'title' => 'Click me!', 
       'href' => './', 
      ], 
      [ 
       'title' => 'Click me too!', 
       'href' => './', 
      ] 
     ] 
    ] 
]; 

負載的配置定義菜單:

# plugins/TestPlugin/config/bootstrap.php 

use Cake\Core\Configure; 
Configure::load('TestPlugin.menus', 'default' , true); 

而讀取變量:

# src/Controller/AppController.php 

public function initialize() 
{ 
    parent::initialize(); 
    $plugin_menus = Configure::read('menus); 

但如果我有更多的一個插件,menus正在被覆蓋。

我不確定這是否是最好的方法。我試圖實現的是多個模塊更改(附加到)相同的配置變量

回答

0

如果是我,我會使用生成導航的View Cell

在每個插件bootstrap.php文件中,我將該插件附加到Configure變量以添加其導航。

Configure::write('navigation', array_merge(Configure::read('navigation'), $myNavArray); 

然後在導航視圖電池,我可以處理該Configure變量。

foreach (Configure::read('navigation') as $navItem) { 
    // Build nav, or output, etc 
} 

這樣做的好處是,由於View Cell的緣故,您的導航將無處不在。您還將擁有一個View Cell控制器,這意味着您可以在導航中執行更多操作,例如在輸出導航項之前檢查權限。

通過掛鉤引導程序,您還可以靈活地包含或不包含插件導航,只需要不加載引導程序,或者先檢查插件設置。

+0

我的問題是我用'Configure :: read('menus')加載插件的導航;'它會覆蓋任何其他插件的'$ menu'變量。所以我正在尋找一種方法來加載'plugins/TestPlugin/menus.php'文件,該文件返回一個'$ menus'數組,而不覆蓋任何已經存在的'$ menus'變量。 – karivolas

+0

你已經錯過了我在答案中使用'array_merge'。以便您可以以多維方式鍵入數組以適應您的額外導航數據。 –

相關問題