2017-11-16 4 views
0

ich ein CakePHP Plugin https://github.com/anuj9196/CakePHP-App-InstallerKraft CakePHP Plugin sein eigenes Layout verwenden

Das Plugin default.ctp Layout wird mit von plugin_path/src/template/layout/default.ctp

geschrieben habe, wenn es ein anderes Thema in der Host-Anwendung verwendet wird. Wie in meinem Fall habe ich Setup eine in AppController ‚s beforeRender()

$this->viewBuilder()->setTheme('DashboardTemplate'); 

DashboardTemplate ist in /plugin/ Verzeichnis der Anwendung.

Nun, wenn ich mein Plugin URL Zugriff mit example.com/installer/install

Die Vorlage lädt oben auf DashboardTemplate Thema.

Wie kann ich sie im AppController des Plugins deaktivieren?

Die AppController innerhalb Plugin-Verzeichnis enthält

<?php 
namespace Installer\Controller; 

use App\Controller\AppController as BaseController; 

class AppController extends BaseController 
{ 
    // nothing here 
} 

Antwort

0

das Thema Entfernen von beforeRender() in Ihrem Plugins AppController verwenden.

<?php 
namespace Installer\Controller; 

use App\Controller\AppController as BaseController; 

class AppController extends BaseController 
{ 
    /** 
    * @param \Cake\Event\Event $event The beforeRender event. 
    * @return \Cake\Http\Response|null|void 
    */ 
    public function beforeRender(Event $event) 
    { 
     try { 
      return parent::beforeRender($event); 
     } finally { 
      $this->viewBuilder()->setTheme(null); 
     } 
    } 
} 
0

Sie zwischen Layouts in der Ansicht und Controller wechseln können ziemlich leicht .. Plugin Syntax

// inside controller 
    $this ->layout = 'Plugin.layout'; 

//inside view template 
    $this ->layout = 'Plugin.layout'; 

Verwendung Wenn Sie nur das Thema deaktivieren möchten, verwenden Sie Mathew Methode oben. Aber Vorsicht, das wird das Thema für die ganze Anwendung nicht nur dieses Plugin für den Fall, dass einige Ihrer App-Code nach Ihrem Plugin ausgeführt wird

+0

Deaktivieren Sie ziemlich sicher, dass die Syntax, die Sie hier gezeigt haben, ist für einige frühere Version von CakePHP, nicht die 3.x-Serie. –