Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 31-01-2012 03:56:46

shiva
Membre
Date d'inscription: 31-01-2012
Messages: 10

[Zend_Layout][ZF 1.11] layout par module

Bonjour,

Je souhaite mettre en place un plugin pour charger un layout en fonction du modules.

Mon arborescence est la suivante :

Code:

                
    |--application
    |    |--configs
    |    |        |--application.ini
    |    |
    |    |--modules
    |    |        |--admin    
    |    |        |    |--configs
    |    |        |    |        |--navigation.xml
    |    |        |    |        |--header_nav.xml
    |    |        |    |        |--footer_nav.xml
    |    |        |    | 
    |    |        |    |--controllers
    |    |        |    |--forms
    |    |        |    |--languages
    |    |        |    |        |--en
    |    |        |    |        |--es
    |    |        |    |        |--fr
    |    |        |    |
    |    |        |    |--layouts
    |    |        |    |--models
    |    |        |    |--services
    |    |        |    |--views
    |    |        |      Bootstrap.php
    |    |        |
    |    |        |--default
    |    |            |--configs
    |    |            |        |--navigation.xml
    |    |            |        |--header_nav.xml
    |    |            |        |--footer_nav.xml
    |    |            | 
    |    |            |--controllers
    |    |            |--forms
    |    |            |--languages
    |    |            |        |--en
    |    |            |        |--es
    |    |            |        |--fr
    |    |            |
    |    |            |--layouts
    |    |            |--models
    |    |            |--services
    |    |            |--views
    |    |            Bootstrap.php
    |    |
    |    |--Bootstarp.php
    |
    |--library
         |--Custom
         |--Controller
         |--Action
              |--Helper
              |--Plugin
              |   |--ModuleLayout.php
              |     
              |--View
                  |--FlashMessenger.php

Mon fichier [/b]application.ini[/b]

Code:

[production]
phpSettings.display_startup_errors     = 0
phpSettings.display_errors         = 0
phpsettings.date.timezone         = "UTC"

includePaths.library     = APPLICATION_PATH "/../library"

bootstrap.path     = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class     = "Bootstrap"

appnamespace     = "Application"

; Autoloader namespaces
autoloadernamespaces.custom    = "Custom_"

resources.frontController.plugins.layout       = "Custom_Controller_Plugin_ModuleBasedLayout"
;resources.frontController.plugins.Language = "Custom_Controller_Plugin_Language"

; Default controller
resources.frontController.params.prefixDefaultModule     = true
resources.frontController.moduleDirectory         = APPLICATION_PATH "/modules"
resources.frontController.defaultControllerName     = "Index"
resources.frontController.defaultAction         = "index"
resources.frontController.defaultModule         = "default"
resources.frontController.throwErrors         = false
resources.frontController.throwExceptions         = false
resources.frontController.params.displayExceptions     = 0
resources.modules[]                                                  = ""                     

; VIEW
resources.view.doctype    = "HTML5"
resources.view.encoding  = "utf-8"
; end VIEW

; LAYOUT
resources.layout.layout         = "layout"
resources.layout.pluginClass     = "Custom_Controller_Plugin_ModuleBasedLayout"
; end LAYOUT


; connexion à une base de données
resources.db.adapter             = "pdo_mysql"
resources.db.params.charset         = "UTF8"
resources.db.params.host         = "localhost"
resources.db.params.username         = "root"
resources.db.params.password         = ""
resources.db.params.dbname         = "mabase"
resources.db.params.date_format     = "YYYY-MM-ddTHH:mm:ss"
resources.db.isDefaultTableAdapter     = true

; place after resources.db section
resources.session.save_path                       = APPLICATION_PATH "/data/sessions"
resources.session.use_only_cookies     = true
resources.session.remember_me_seconds     = 864000
resources.session.saveHandler.class     = "Zend_Session_SaveHandler_DbTable"

resources.session.saveHandler.options.name         = "session"
resources.session.saveHandler.options.primary[]         = "session_id"
resources.session.saveHandler.options.primary[]         = "save_path"
resources.session.saveHandler.options.primary[]         = "name"
resources.session.saveHandler.options.primaryAssignment[]     = "sessionId"
resources.session.saveHandler.options.primaryAssignment[]     = "sessionSavePath"
resources.session.saveHandler.options.primaryAssignment[]     = "sessionName"
resources.session.saveHandler.options.modifiedColumn     = "modified"
resources.session.saveHandler.options.lifetimeColumn         = "lifetime"
resources.session.saveHandler.options.dataColumn         = "session_data"

[staging : production]

[testing : production]
phpSettings.display_startup_errors     = 1
phpSettings.display_errors         = 1

[development : production]
phpSettings.display_startup_errors     = 1
phpSettings.display_errors         = 1
resources.frontController.params.displayExceptions = 1

Mon plugin ModuleBasedLayout.php

Code:

< ? php

class Custom_Controller_Plugin_ModuleBasedLayout extends Zend_Layout_Controller_Plugin_Layout
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $this->getLayout()->setLayoutPath(
            Zend_Registry::get('config')->resources->frontController->moduleDirectory
            . DS . $request->getModuleName() . DS . 'layouts' );
    }
}

Mon Bootstrap.php

Code:

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{
       protected function _initDb(){    
                   $resource = $this->getPluginResource('db');
        try {
            $db = $resource->getDbAdapter();
            $db->getConnection();
            
            Zend_Registry::set('db',$db);
            Zend_Db_Table_Abstract::setDefaultAdapter($db);    
        }catch ( Exception $e) {
            exit( $e -> getMessage() );
        }
            
    }

Mon Bootstrap.php de module ('default')

Code:

class Default_Bootstrap extends Zend_Application_Module_Bootstrap {
    
    protected $_moduleName = 'default';
    
    protected function _initDoctype() {
        $view = new Zend_View();
        $view->doctype('XHTML1_STRICT');
        $view->setEncoding('UTF-8');
        $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=utf-8');
        $view->headMeta()->appendHttpEquiv('Content-Language', 'fr-FR');
        //$view->headMeta()->appendHttpEquiv('Cache-Control', 'no-cache');
        $view->headTitle()->setSeparator(' - ')->append('.:: My Company ::. (Default)');
        
        $view->headLink()->appendStylesheet('/css/reset.css');
        $view->headLink()->appendStylesheet('/css/typo.css');
        $view->headLink()->appendStylesheet('/css/form.css');
        $view->headLink()->appendStylesheet('/css/grid.css');
        $view->headLink()->appendStylesheet('/css/layout.css');
        $view->headLink()->appendStylesheet('/css/skin.css');
        $view->headLink()->appendStylesheet('/css/papes.css');
        $view->headLink()->appendStylesheet('/css/navigation.css');
        $view->headLink()->appendStylesheet('/css/paginator.css');
        $view->headLink()->appendStylesheet('/css/button.css');
        $view->headScript()->appendFile('/js/jquery.js');       
        
    }
    
    
    
    
    protected function _initNavigation() {
        $options = new Custom_Controller_Plugin_ModuleBasedLayout();
                
$this->bootstrap('options');
$layout  = $this->getResource('layout');
$view    = $layout->getView();    
        
    
        $nav     = new Zend_Config_Xml(APPLICATION_PATH . '/modules/' . $this->_moduleName . '/configs/navigation.xml','nav');
        $navigation = new Zend_Navigation($nav);
        
        $header_nav     = new Zend_Config_Xml(APPLICATION_PATH . '/modules/' . $this->_moduleName . '/configs/header_nav.xml','nav');
        $navigation = new Zend_Navigation($header_nav);
        
        $footer_nav     = new Zend_Config_Xml(APPLICATION_PATH . '/modules/' . $this->_moduleName . '/configs/footer_nav.xml','nav');
        $navigation = new Zend_Navigation($footer_nav);
        
        $view->navigation($navigation);
        $view->header_nav($header_nav);
        $view->footer_nav($footer_nav);
    }
    
}

Au niveau suivant :

Code:

 
protected function _initNavigation() {
        $options = new Custom_Controller_Plugin_ModuleBasedLayout();
                
$this->bootstrap('options');
$layout  = $this->getResource('layout');
$view    = $layout->getView();

je ne sais pas comment récupérer les ressources de mon layout.

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