Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
Je viens de commencer une petit appli modulaire.
J'ai fond la partie "default" et l' "admin".
Voici mon application.ini :
resources.modules[] = default.resources.layout.layout = default resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts" admin.resources.layout.layout = admin resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
J'ai un helper d'action qui gere les modules :
class Qda_Controller_Action_Helper_LayoutLoader extends Zend_Controller_Action_Helper_Abstract { public function preDispatch() { $bootstrap = $this->getActionController()->getInvokeArg('bootstrap'); $config = $bootstrap->getOptions(); $moduleName = $this->getRequest()->getModuleName(); if (isset($config[$moduleName]['resources']['layout']['layout'])) { $layoutScript = $config[$moduleName]['resources']['layout']['layout']; $this->getActionController() ->getHelper('layout') ->setLayout($layoutScript); } /* if (isset($config[$moduleName]['resources']['layout']['layoutPath'])) { $layoutPath = $config[$moduleName]['resources']['layout']['layoutPath']; $moduleDir = Zend_Controller_Front::getInstance()->getModuleDirectory(); Zend_Layout::getMvcInstance()->setLayoutPath( $moduleDir. DIRECTORY_SEPARATOR .$layoutPath ); }*/ } }
Jusque là, tout marche.
Mais j'aimerai bien avoir un layout PAR module. J'ai donc essayer de jouer avec resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
.mais si je fais :
default.resources.layout.layout = default default.resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts" admin.resources.layout.layout = admin admin.resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
Le bootStrap ne trouve plus le layout de l'admin : Uncaught exception 'Zend_Application_Bootstrap_Exception' with message 'Resource matching "layout" not found' in.
protected function _initLayoutHelper() { $this->bootstrap('frontController'); $layout = Zend_Controller_Action_HelperBroker::addHelper( new Qda_Controller_Action_Helper_LayoutLoader()); } function _initViewHelpers() { $this->bootstrap('layout'); $layout = $this->getResource('layout'); $view = $layout->getView(); $view->doctype('XHTML1_STRICT'); $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8'); $view->headTitle()->setSeparator(' - '); $view->headTitle('Quoi d\'autre ?'); }
Comment faire ?
Merci à tous
Fabrice
Hors ligne
J'ai à peu près la même chose :
http://www.z-f.fr/forum/viewtopic.php?i … p=2#p21529
Chez moi ça marche
Hors ligne
Salut,
Merci
oui, c pareil en fait. Mais déjà je comprends par pourquoi je dois mettre le "default" dans :
default.resources.layout.layout = default
Ou alors je dois tester le $moduleName dans le helper_LayoutLoader
Fabrice
Hors ligne
Par contre, j'ai vu que j'ai bien un layout (/layouts/scripts/admin.phtml) dans le dossier de base mais pas dans celui du module.
Fabrice
Hors ligne
Tu mets tous les layouts dans le meme dossier ou tu les sépares ? au quel cas faut changer cette ligne :
admin.resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
Hors ligne
J'aurai aimé les mettre dans /modules/admin/layouts/scripts
Là, ils sont dans le meme dossier que les autres layouts.
Et je sais pas trop comment faire. Si je change juste le dossier, je vais devoir surement modifier le bootstrap, etc, non ?
Fabrice
Hors ligne