2016-10-22 9 views
0

ほとんどの機能にプラグインを使用する非常に基本的なアプリがあります。私は、各プラグインにいくつかのカスタムメニューとメニュー項目を定義し、これらのメニューをすべて1つの場所(おそらく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); 

しかし、もし1つ以上のプラグインがあります。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コントローラも用意されています。つまり、ナビゲーション項目を出力する前に権限を確認するなど、ナビゲーションにもっと多くのことを行うことができます。

ブートストラップをフックすることで、プラグインの設定を最初に確認するだけで、ブートストラップを読み込まないかのどちらかでプラグインのナビゲーションを含めるかどうかを柔軟に設定できます。

+0

私の問題は、他のプラグインの '$ menu'変数を上書きする' Configure :: read( 'menus);でプラグインのナビゲーションを読み込むことです。ですから、 '$ menus'配列を返す' plugins/TestPlugin/menus.php'ファイルをロードする方法を探しています。既存の '$ menus'変数を上書きすることはありません。 – karivolas

+0

あなたは答えに 'array_merge'を使っていません。そのため、多次元の方法で配列をキーして、余分なナビゲーションデータを調整することができます。 –

関連する問題