Ver Mensaje Individual
  #8 (permalink)  
Antiguo 11/08/2011, 16:33
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Módulos dentro de módulos?

No lo he probado pero podrías hacer algo así:
Un dispatcher (library/My/Dispatcher/Custom.php):
Código PHP:
Ver original
  1. <?php
  2. class My_Dispatcher_Custom extends Zend_Controller_Dispatcher_Standard
  3. {
  4.     public function resetControllerDirectory()
  5.     {
  6.         $this->_controllerDirectory = array();
  7.     }
  8. }

Bootstrap:
Código PHP:
Ver original
  1. <?php
  2.  
  3. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  4. {
  5.     public function _initPlugin()
  6.     {
  7.         $this->bootstrap('frontController');
  8.         $front = $this->getResource('frontController');
  9.         $sModuleDir = $this->getOption('mainModuleDirectory');
  10.        
  11.         $front->registerPlugin(new Application_Plugin_SubModules($sModuleDir));
  12.         $front->setDispatcher(new My_Dispatcher_Custom());
  13.     }
  14.    
  15.     public function _initRoutes()
  16.     {
  17.         $this->bootstrap('frontController');
  18.         $front = $this->getResource('frontController');
  19.        
  20.         $router = $front->getRouter();
  21.         $router->removeDefaultRoutes();
  22.         $router->addRoute(
  23.             'default',
  24.             new Zend_Router_Route(
  25.                 ':mainmodule/:module/:controller/:action/*',
  26.                 array(
  27.                     'mainmodule' => 'default',
  28.                     'module' => 'default',
  29.                     'controller' => 'index',
  30.                     'action' => 'index'
  31.                 )
  32.             )
  33.         );
  34.     }
  35.  
  36. }

Un plugin (application/plugins/SubModules.php):
Código PHP:
Ver original
  1. <?php
  2.  
  3. class Application_Plugin_SubModules extends Zend_Controller_Plugin_Abstract
  4. {
  5.     $this->_modulesDirectory = '';
  6.    
  7.     public function __construct($modulesDirectory)
  8.     {
  9.         $this->_modulesDirectory = $modulesDirectory;
  10.     }
  11.    
  12.     public function routeStartup(Zend_Controller_Request_Abstract $request)
  13.     {
  14.         $sModule = $request->getParam('mainmodule');
  15.         $Front = Zend_Controller_Front::getInstance();
  16.         $Front->getDispatcher()->resetControllerDirectory();
  17.         if (empty($sModule)) {
  18.             $sModule = 'default';
  19.         }
  20.        
  21.         $Front->addModuleDirectory($this->_modulesDirectory . DIRECTORY_SEPARATOR . $sModule);
  22.     }
  23. }

En tu application.ini:
Código:
mainModuleDirectory = APPLICATION_PATH "/generalmodules"
y dentro de generalmodules pones tu module1, module2, default, etc.

Saludos.