Mostrando entradas con la etiqueta plugin Layout. Mostrar todas las entradas
Mostrando entradas con la etiqueta plugin Layout. Mostrar todas las entradas

martes, 19 de junio de 2012

Layout para cada Módulo

En nuestra estructura  modular se han diseñado 3 módulos, default, admin y bibloteca, para facilitar el cambio del layout se ha creado un Front Controller Plugin.

Que es un Front Controller Plugin
Es un clase que extiende de Zend_Controller_Plugin_Abstract que permite mejorar el comportamiento y la versatilidad de nuestra aplicación, ahorrando muchas lineas de código a través de los controllers. El Front Controller Plugin permite interceptar a través de seis eventos o hooks y ejecutar ciertas acciones que nos facilitaran el trabajo.

  • routeStartup () : antes de la solicitud de enrutamiento
  • routeShutdown () : después de la solicitud de enrutamiento
  • dispatchLoopStartup () : antes de entrar en el bucle de envío
  • preDispatch () : antes de despachar una acción individual
  • postDispatch () : tras el envío de una acción individual
  • dispatchLoopShutdown () : después de completar el bucle de envío

Registro de plugins application.ini
;Registrar Plugins
autoloaderNamespaces[] = "Plugins_"
resources.frontController.plugins.Layouts = "Plugins_Layouts"

Indica que en el directorio de library se creará una carpeta Plugins y que la clase se llamará Layouts.php. Con la linea resource.frontController.plugins, registramos y activamos el plugin, aunque tambien lo podemos hacer en el Bootstrap

Crear la clase Layouts

class Plugins_Layouts extends Zend_Controller_Plugin_Abstract {

private $_nombreModulo;

public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$this->_nombreModulo = $request->getModuleName();
$layout = Zend_Layout::getMvcInstance();

switch ($this->_nombreModulo)
{
case 'admin':
$layout->setLayout('admin');
break;

case 'biblioteca':
$layout->setLayout('biblioteca');
break;

default:
$layout->setLayout('default');
break;
}
}
}


La clase será utilizada en el evento preDispatch

Activar de plugin en Bootstrap

protected function _initRegisterPlugins()

    {
      $front = Zend_Controller_Front::getInstance();
      $front->registerPlugin(new Plugins_Layouts());  
        
    }

Con esta funcionalidad al cambiar de modulo, automáticamente se cambiará el layout de la aplicación. Adicional a éste podríamos organizarlo para detectar el perfil del usuario y mostrar un layout especifico.