Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 09-06-2010 17:32:39

pinouf
Membre
Date d'inscription: 05-09-2008
Messages: 41

[1.10] Layout par module , fichier ini

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

Code:

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

 

#2 09-06-2010 21:18:50

padapara
Membre
Date d'inscription: 25-03-2010
Messages: 10

Re: [1.10] Layout par module , fichier ini

Ton fichier me parait byzarre par rapport au mien :

Code:

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

 

#3 09-06-2010 22:24:38

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [1.10] Layout par module , fichier ini

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


----
Gruiiik !

Hors ligne

 

#4 10-06-2010 10:47:56

pinouf
Membre
Date d'inscription: 05-09-2008
Messages: 41

Re: [1.10] Layout par module , fichier ini

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 sad ... as tu le plugin en question ou un sujet qui en traite?

merci de votre aide smile

Hors ligne

 

#5 10-06-2010 14:26:24

padapara
Membre
Date d'inscription: 25-03-2010
Messages: 10

Re: [1.10] Layout par module , fichier ini

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é :

Code:

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 : ##############################

Code:

        // 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 : #################################

Code:

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 : ################################

Code:

[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

 

#6 10-06-2010 14:38:50

padapara
Membre
Date d'inscription: 25-03-2010
Messages: 10

Re: [1.10] Layout par module , fichier ini

J'en profite pour mettre une partie de mon code précédent (fichier bootstrap) en avant :

Code:

    /* 
    
     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

 

#7 10-06-2010 15:04:26

pinouf
Membre
Date d'inscription: 05-09-2008
Messages: 41

Re: [1.10] Layout par module , fichier ini

salut smile je pense que ceux qui fait marcher le truc est ca !

Code:

    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 smile
peut tu partager ton plugin^^?

Hors ligne

 

#8 10-06-2010 20:43:07

padapara
Membre
Date d'inscription: 25-03-2010
Messages: 10

Re: [1.10] Layout par module , fichier ini

Effectivement voici le plugin :

Code:

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

 

#9 10-06-2010 21:28:13

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: [1.10] Layout par module , fichier ini

Utile les balides [ code ] c'est vraiment pas pratique à lire sans ça

Hors ligne

 

#10 11-06-2010 11:07:40

pinouf
Membre
Date d'inscription: 05-09-2008
Messages: 41

Re: [1.10] Layout par module , fichier ini

merci bcp padapara smile

j'avais trouvé entre temps ^^ et c'est quasiment la même chose big_smile
un grand merci pour ton aide

Hors ligne

 

#11 11-06-2010 11:31:15

padapara
Membre
Date d'inscription: 25-03-2010
Messages: 10

Re: [1.10] Layout par module , fichier ini

De rien et si quelqu'un essaye d'utiliser /configs/navigation.xml et qu'il y parvienne cela serait génial...

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages