2016-10-22 1 views
0

Ich habe eine ziemlich einfache App, die Plugins für die meisten Funktionen verwendet. Ich möchte jedem Plugin erlauben, einige benutzerdefinierte Menüs und Menüpunkte zu definieren, alle diese Menüs an einem Ort zu sammeln (vielleicht AppController :: initialize) und ein Array zu erstellen, das an ein Hauptmenü-Element übergeben wird komplettes MenüAnfügen von Einstellungen von einem Plugin

Was ich bisher getan ist die Menüs der

Plugin definieren
# plugins/TestPlugin/config/menus.php 

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

Laden Sie die config:

# plugins/TestPlugin/config/bootstrap.php 

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

Und lesen Sie die Variable:

# src/Controller/AppController.php 

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

Aber wenn Ich habe mehr als ein Plugins, menus wird überschrieben.

Ich bin mir nicht sicher, ob das der beste Weg ist. Was ich versuche zu erreichen, ist mit mehreren Modulen ändern (append to) die gleiche Konfigurationsvariable

Antwort

0

Wenn es mich wäre, würde ich eine View Cell verwenden, die die Navigation generiert.

Innerhalb jedes Plugins bootstrap.php Datei Ich würde das Plugin an eine Configure Variable anfügen, um seine Navigation hinzuzufügen.

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

dann in der Zelle Navigationsansicht, konnte ich verarbeiten nur, dass Configure Variable.

Die Vorteile sind, dass Ihre Navigation aufgrund der View Cell überall gleich ist. Sie haben auch einen View Cell-Controller, was bedeutet, dass Sie mehr Dinge für die Navigation tun können, wie z. B. das Überprüfen von Berechtigungen, bevor Sie Navigationselemente ausgeben.

Indem Sie den Bootstrap anschließen, haben Sie auch die Flexibilität, die Plugins-Navigation einzuschließen oder nicht, indem Sie entweder das Bootstrap nicht laden oder zuerst das Plugins-Setup überprüfen.

+0

Mein Problem ist, dass ich die Navigation des Plugins mit 'Configure :: read ('menus)' lade, was die Variable' $ menu' jedes anderen Plugins überschreibt. Also suche ich nach einer Möglichkeit, die 'plugins/TestPlugin/menus.php' Datei zu laden, die ein' $ menus' Array zurückgibt, ohne eine bereits existierende '$ menus' Variable zu überschreiben. – karivolas

+0

Sie haben meine Verwendung von 'array_merge' in der Antwort verpasst. Damit können Sie das Array auf eine multidimensionale Weise eintasten, um Ihre zusätzlichen Navigationsdaten aufzunehmen. –

Verwandte Themen