2010-11-28 30 views

Répondre

6

créer un plug-in de mise en page, pour passer d'un modèle lorsqu'un module non par défaut est appelé:

class MyApplication_Layout_Controller_Plugin_Layout extends Zend_Layout_Controller_Plugin_Layout 
{ 

    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 
     switch ($request->getModuleName()) { 
      case 'admin': $this->_moduleChange('admin'); 
     } 
    } 

    protected function _moduleChange($moduleName) { 
     $this->getLayout()->setLayoutPath(
      dirname(dirname(
       $this->getLayout()->getLayoutPath() 
      )) 
      . DIRECTORY_SEPARATOR . 'layouts/scripts/' . $moduleName 
     ); 
     $this->getLayout()->setLayout($moduleName); 
    } 

} 

Puis dans mon Bootstrap, je fais ceci:

Zend_Layout::startMvc(
      array(
       'layoutPath' => self::$root . '/application/views/layouts/scripts', 
       'layout' => 'layout', 
       'pluginClass' => 'MyApplication_Layout_Controller_Plugin_Layout' 
      ) 
     ); 

Les mises en page non définies par défaut vont dans un dossier nommé après le module, donc ma structure de répertoire ressemble à ceci:

/path/to/application/views/layouts/scripts/layout.phtml --> default layout 

/path/to/application/views/layouts/scripts/admin/admin.phtml --> admin layout 
+0

merci ... désolé d'avoir répondu tard –

1

essayer

//in controller 
$this->_helper->layout->setLayout('layoutName'); 

Il passe la mise en page à layoutName.phtml dans votre vue du module/dossier scripts;)

+0

Cela ne fonctionne pas du tout. Devrait être $ this -> _ helper-> layout-> setLayout ('layoutname') – Andy

+0

Oui, vous avez évidemment raison. Je l'ai corrigé. –

+0

Rapide et efficace, merci pour le conseil @ TomášFejfar! –

1

C'est faux. La ligne:

class MyApplication_Layout_Controller_Plugin_Layout extends end_Layout_Controller_Plugin_Layout 

devrait être extends Zend_Controller_Plugin_Abstract. Sinon, vous obtiendrez une erreur concernant mvcSuccessfulActionOnly.