Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je suis tout nouveau parmi vous et je "débute" sous Zend. J'ai compris le principe MVC et le fonctionnement de base de Zf 1.
Voila, j'ai mis en place mon application modulaire, avec des modules : Site, et Admin. Je souhaite avoir un layout différent pour l'admin, car il faut que je face une interface d'administration et il est impératif d'avoir un autre layout que celui de la partie publique.
Voici en gros mon arborescence :
Application
Index.php
bootstrap.php
-/Modules
--/site
---bootstrap.php
--/admin
---bootstrap.php
/layouts
-/scripts
--admin.phtml
--site.phtml
Voici mon aplication.ini :
;initialisation des modules resources.modules[] = resources.frontController.moduleDirectory = APPLICATION_PATH "/modules/" resources.frontController.defaultModule = "site" resources.frontController.defaultControllerName = "page" resources.frontController.defaultAction = "accueil" ;Layout resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" admin.resources.layout.layout = "admin" site.resources.layout.layout = "site"
J'aimerais avec un coup de main pour pouvoir m'aiguiller sur une fonction à initialiser ou autre, afin de charger un layout séparé pour chacun de mes deux modules.
Cela fait une semaine que je parcours internet/forums (dont celui la), mais je n'ai trouvé aucun résultat qui me convienne.
Merci de votre aide.
Dernière modification par smowgz (01-04-2013 20:14:43)
Hors ligne
salut,
il y a la méthode setLayout() de Zend_Layout(je te renvoie dans l'api) qui permet d’initialiser un layout.Tu as 2 manières de procéder:
la 1ère est d'appeler setlayout() dans tous les controlleurs qui doivent utiliser un même layout.
[lang=php] public function init() { $this->_helper->layout->setLayout('layout'); }
La seconde méthode est qu'au lieu de dupliquer setLayout() dans n controlleurs il faut plutot privileger un composant zend notamment un plugins qui peut agir ou est accessible dans toute l'application.
[lang=php] //application/plugins/Theme.php class Application_Plugin_Theme extends Zend_Controller_Plugin_Abstract { public function preDispatch(Zend_Controller_Request_Abstract $request) { $layout=Zend_Layout::getMvcInstance(); if($request->getModuleName()=="nomDeTonModule"{ $layout->setLayout('adminLayout'); // layouts/adminLayout.phtm } } } }
si l'utilisation d'un plugins te pose problème regarde dans la doc.
Dernière modification par amiss (01-04-2013 20:09:54)
Hors ligne
C'est fabuleux ! La méthode avec la fonction init() dans chaque controller marche à merveille, je testerai la méthode par plugin un peu plus tard.
En tout cas merci de la réponse rapide.
Hors ligne
L'avantage du plugin étant de ne pas avoir à te soucier du layout lors de l'ajout d'un controller.
Tu peux aussi imaginé un plugin qui prends application.ini en compte et des lignes pour les layouts des différents modules "spécifiques" dans cette config.
Hors ligne