2010-11-23 4 views
0

Comment ajouter une nouvelle mise en page pour la fin de l'avant dans le fichier de configuration, et garder un pour la section d'administrationajouter une autre mise en page

+0

est la section d'administration un module? – piddl0r

Répondre

0

Par défaut, ce n'est pas possible, parce que le bootstrap est (évidemment) exécuté avant que la demande est acheminée . Le bootstrap ne peut pas savoir si l'avant ou l'arrière est appelé. Vous pouvez créer un FrontControlle -Plugin, qui lit un paramètre de configuration (personnalisé) et la demande routée, puis définit la mise en page correcte.

0

J'ai eu exactement le même problème et l'ai résolu en sous-classe bootstrap. Donc, j'avais trois fichiers bootstrap

  1. espace utilisateur un
  2. Administrateur un
  3. commun un

Quelque chose comme ça pour le fichier d'amorçage (ils peuvent tous être placés sur l'emplacement par défaut Zend)

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 

    protected function _initXXX() { 
     /* COMMON FOR ALL */ 
    } 

    /* ... etc ... */ 
} 


class BootstrapAdmin extends Bootstrap 
{ 
    protected function _initAdmin1() { 
     /* specific for admin */ 
    } 
    /* ... etc ... */ 
} 

class BootstrapUser extends Bootstrap 
{ 
    protected function _initUser1() { 
     /* specific for admin */ 
    } 
    /* ... etc ... */ 
} 

Où (1) et (2) étendre (3). Je recréer le code si vous le souhaitez.

Après cela dans le index.php:

if ($adminMode) { 
$application->setBootstrap(APPLICATION_PATH . '/Name_of_Bootstrap_file.php', 'BootstrapAdmin'); 
} else { 
$application->setBootstrap(APPLICATION_PATH . '/Name_of_Bootstrap_file.php', 'BootstrapUser'); 
} 

La première fois que je l'ai fait, je placé toutes les classes dans le même fichier Name_of_Bootstrap_file.php, afin de les changer en même temps, peut le faire différemment la prochaine fois si ...

J'espère avoir aidé.

+0

s'il vous plaît peut me faire la structure – aah

+0

Voilà l'espoir couvert vos besoins –

0

mise en page qui dépend de ce que les modules est chargé

dans mes configs/application.ini

resources.layout.layout = "default" 
resources.layout.pluginClass = "Core_Controller_Plugin_ModuleBasedLayout" 

Et puis mon plugin

<?php 
class Core_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 
      . DIRECTORY_SEPARATOR . $request->getModuleName() . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'layouts'); 
    } 
} 

et dans mon bootstrap.php

protected function _initConfig() { 
    Zend_Registry::set ('config', new Zend_Config ($this->getOptions())); 
} 

Mon les mises en page sont stockées dans views/layouts/default.php

0

Je pensais que j'aurais la solution. Cela suppose que la section "admin" est un module.

J'ai développé une aide d'action que peut changer la mise en page en fonction du nom du module et configuration - ModuleLayoutLoader

Vous pouvez le configurer à partir de votre fichier de configuration en utilisant le plugin ressource d'application ModuleLayout associée. Par exemple

resources.moduleLayout.admin.layout = "admin" 
resources.moduleLayout.anotherModule.layout = "foo" 

Vous pouvez également définir la propriété layoutPath pour vos mises en page du module en utilisant quelque chose comme ça si vous voulez garder vos scripts de mise en page se séparent

resources.moduleLayout.admin.layoutPath = APPLICATION_PATH "/path/to/admin/layout" 
Questions connexes