Zend Tutorial – Modulabhängiger Wechsel des Layouts

Das Wechseln des Design in Abhängigkeit von eurem Modul kann im Zend Framework über ein Plugin realisiert werden. Legt dazu im Ordner application/Plugin/Layout die Datei Changer.php an und füge folgenden Inhalt in die Datei:

class Plugin_Layout_Changer extends Zend_Controller_Plugin_Abstract
{
    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        //Prüft ob eine Layoutdatei in Abhängigkeit vom Modulnamen existiert
        if(is_file(Zend_Layout::getMvcInstance()->getLayoutPath()
        .$request->getModuleName().'.phtml'))
        {
            //wenn ja, dann diese setzen
            Zend_Layout::getMvcInstance()->setLayout($request->getModuleName());
        }
        else
        {
            //wenn nicht, dann Standardlayout setzen, hier: bibo
            Zend_Layout::getMvcInstance()->setLayout('bibo');
        }
    }
} 

Jetzt müsst ihr noch in eurer Bootstrap-Datei eurer Anwendung das Plugin initialisieren. Fügt dazu einfach folgende Methode eurer Bootstrap-Klasse hinzu:

protected function _initLayoutChanger()
{
	$this->bootstrap('frontController');
	$this->getResource('frontController')
		 ->registerPlugin(new Plugin_Layout_Changer());
}

Überprüft, ob folgende Einträge in eurer application.ini vorhanden sind:

bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
autoloadernamespaces.0 = "Plugin_"

Nun ändert sich automatisch das Layout, in Abhängigkeit von eurem Modulnamen. Achtet darauf, dass die entsprechende Layoutdatei im Ordner application/layouts/scripts/ genauso benannt ist, wie euer Ordnername des Moduls. Bei mir existieren beispielsweise im Ordner application/modules/ die Module „bibo“ und „login“. Demzufolge heißen meine Layoutscripte im Ordner application/layouts/scripts auch „bibo.phtml“ und „login.phtml“. Existiert keine entsprechende Layoutdatei, wird das in der Changer.php im else Zweig angegebene Layout geladen (in meinem Fall das Layoutscript bibo.phtml).