Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
bonjour,
j'essaye de mettre en place un layouts par module
Avant j'y arrivais mais maintenant avec la dernière version cela ne marche pas
voici mon arbo
application
--admin
--controllers
--layouts
--models
--views
--front
--controllers
--layouts
--models
--views
mon fichier ici
phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" resources.frontController.params.displayExceptions = 1 appnamespace = "Application" ;controllers resources.frontController.controllerDirectory.default = APPLICATION_PATH "/front/controllers" resources.frontController.controllerDirectory.admin = APPLICATION_PATH "/admin/controllers" ;layouts resources.modules[] = resources.layout.layout = layout resources.layout.layoutPath = APPLICATION_PATH "/front/layouts/" admin.resources.layout.layout = layout admin.resources.layout.layoutPath = APPLICATION_PATH "/admin/layouts/"
quand je tape
http://zendtest/
il me prend le layout qui est bien situé dans application/front/layouts
quand je tape http://zendtest/admin
il va également me prendre le layout situé dans application/front/layouts comme si il comprenait pas les lignes d'un bas
merci
Hors ligne
Ton fichier me parait byzarre par rapport au mien :
resources.modules[] = "" default.resources.layout.layout = "default" resources.layout.layoutPath = APPLICATION_PATH "/modules/default/views/scripts" backend.resources.layout.layout = "backend" backend.resources.layout.layoutPath = APPLICATION_PATH "/modules/backend/views/scripts" tools.resources.layout.layout = "tools" tools.resources.layout.layoutPath = APPLICATION_PATH "/modules/tools/views/scripts"
Dernière modification par padapara (11-06-2010 11:34:29)
Hors ligne
C'est impossible de faire ce que tu cherches à faire, il y a pleins de messages à ce sujet sur le forum.
Le seul moyen, est de faire un plugin
Hors ligne
salut padapara : Cela marche t-il pour toi? il y a quoi dans ton bootsrtap? quel est ta version de zend?
salut nORKy : j'avais réussi à le faire dans une version précédente de zend mais maintenant cela ne tourne pas ... as tu le plugin en question ou un sujet qui en traite?
merci de votre aide
Hors ligne
En fait comme un pello je savais même pas dans quelle version je me trouve. Alors j'ai regardé dans la classe version et voilà ce que j'ai trouvé :
const VERSION = '1.10.2';
En ce qui concerne les layouts, cela marche pour moi mais j'ai bien sué sang et eau avant de trouver cette formule ma foi qui marche très bien (sauf pour mon menu en xml voir post suivant...).
############################# fichier index.php : ##############################
// On modifie l'include path de PHP set_include_path(implode(PATH_SEPARATOR, array( realpath(dirname(__FILE__) . '/../library'), get_include_path(), ))); defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development')); // On a besoin de Zend Application pour lancer notre application require_once 'Zend/Application.php'; require_once 'Zend/Loader/Autoloader.php'; Zend_Loader_Autoloader::getInstance(); Zend_Session::rememberMe(2419200); // On lance la session Zend_Session::start(); // On créé l'application, on lance le bootstrap et on lance l'application ! $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); //avant d'invoquer run(), il faut invoquer bootstrap() pour configurer toutes les ressources $application->bootstrap() ->run();
########################### fichier Bootstrap : #################################
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { public function run() { // Cela permet d'avoir la configuration disponible de partout dans notre application Zend_Registry::set('config', new Zend_Config($this->getOptions())); parent::run(); } protected function _initAutoload() { // On enregistre les modules $moduleLoader = new Zend_Application_Module_Autoloader(array( 'namespace' => '', 'basePath' => APPLICATION_PATH)); //return $moduleLoader; $frontController = Zend_Controller_Front::getInstance(); $router = $frontController->getRouter(); $article = new Zend_Controller_Router_Route_Regex( '(.+)-id(\d+)-(\D+).(\D+)', array('module' => 'default', 'controller' => 'index', 'action' => 'index'), array(1 => 'slug_route', 2=> 'id_route', 3 => 'type_route', 4 => 'keyword_route'), '%s-id%d-%s.%s'); $router->addRoute('article', $article); return $moduleLoader; } protected function _initLayoutHelper() { $this->bootstrap('frontController'); Zend_Controller_Action_HelperBroker::addPrefix('App_Controller_ActionHelpers'); $layout = Zend_Controller_Action_HelperBroker::addHelper( new App_Controller_ActionHelpers_LayoutLoader()); } /* protected function _initNavigation() { $view = $this->bootstrap('layout')->getResource('layout')->getView(); $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav'); $view->navigation(new Zend_Navigation($config)); } */ }
######################## fichier application.ini : ################################
[production] # initilisation du report d'erreurs pour le mode production phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 phpSettings.date.timezone = "Europe/Paris" #includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" # so auto-loading will find our classes in library/App autoloaderNamespaces[] = "App_" resources.multidb.db1.adapter = "pdo_pgsql" resources.multidb.db1.host = "localhost" resources.multidb.db1.username = "******" resources.multidb.db1.password = "*****" resources.multidb.db1.dbname = "*********" resources.multidb.db1.default = true resources.multidb.db2.adapter = "pdo_pgsql" resources.multidb.db2.host = "********" resources.multidb.db2.username = "**********" resources.multidb.db2.password = "***********" resources.multidb.db2.dbname = "*********" resources.multidb.db1.charset = "ISO-8859-15" ;resources.frontController.baseUrl = "/public" resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.frontController.controllerDirectory.default = APPLICATION_PATH "/modules/default/controllers" resources.frontController.controllerDirectory.backend = APPLICATION_PATH "/modules/backend/controllers" resources.frontController.defaultModule = "default" resources.frontController.defaultControllerName = "index" resources.frontController.defaultAction = "index" # chargement du plugin Zend_Application_Resource_Modules resources.modules[] = "" default.resources.layout.layout = "default" resources.layout.layoutPath = APPLICATION_PATH "/modules/default/views/scripts" backend.resources.layout.layout = "backend" backend.resources.layout.layoutPath = APPLICATION_PATH "/modules/backend/views/scripts" tools.resources.layout.layout = "tools" tools.resources.layout.layoutPath = APPLICATION_PATH "/modules/tools/views/scripts" resources.view.encoding = "UTF-8" [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.throwexceptions = true resources.multidb.dev.adapter = "pdo_pgsql" resources.multidb.dev.host = "*******" resources.multidb.dev.username = "******" resources.multidb.dev.password = "********" resources.multidb.dev.dbname = "********"
Dernière modification par padapara (11-06-2010 11:33:49)
Hors ligne
J'en profite pour mettre une partie de mon code précédent (fichier bootstrap) en avant :
/* Si c'est dé-commenté cela provoque un bug : le framework prend default.phtml dans le dossier backend/views/scripts... quelque soit le module que j'appelle dans mon navigateur. Dommage alors je ne peux pas créer de menu sans bousiller mes layouts spécifiques à chaque module si je ne m'abuse !! protected function _initNavigation() { $view = $this->bootstrap('layout')->getResource('layout')->getView(); $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav'); $view->navigation(new Zend_Navigation($config)); } */
Si quelqu'un comprend le bouzin, je lui paye un verre...
Dernière modification par padapara (11-06-2010 11:32:50)
Hors ligne
salut je pense que ceux qui fait marcher le truc est ca !
protected function _initLayoutHelper() { $this->bootstrap('frontController'); Zend_Controller_Action_HelperBroker::addPrefix('App_Controller_ActionHelpers'); $layout = Zend_Controller_Action_HelperBroker::addHelper( new App_Controller_ActionHelpers_LayoutLoader()); }
Cependant il me manque la classe +D App_Controller_ActionHelpers_LayoutLoader
je penses que c'est un plugin
peut tu partager ton plugin^^?
Hors ligne
Effectivement voici le plugin :
class App_Controller_ActionHelpers_LayoutLoader extends Zend_Controller_Action_Helper_Abstract { public function preDispatch() { $bootstrap = $this->getActionController() ->getInvokeArg('bootstrap'); $config = $bootstrap->getOptions(); $module = $this->getRequest()->getModuleName(); if (isset($config[$module]['resources']['layout']['layout'])) { $layoutScript = $config[$module]['resources']['layout']['layout']; $this->getActionController() ->getHelper('layout') ->setLayout($layoutScript); } } }
Dernière modification par padapara (11-06-2010 11:32:04)
Hors ligne
Utile les balides [ code ] c'est vraiment pas pratique à lire sans ça
Hors ligne
merci bcp padapara
j'avais trouvé entre temps ^^ et c'est quasiment la même chose
un grand merci pour ton aide
Hors ligne
De rien et si quelqu'un essaye d'utiliser /configs/navigation.xml et qu'il y parvienne cela serait génial...
Hors ligne