Foros del Web » Programando para Internet » PHP » Zend »

Deshabilitar render desde un Plugin

Estas en el tema de Deshabilitar render desde un Plugin en el foro de Zend en Foros del Web. Hola. Tengo un plugin que me carga el layout correspondiente de acuerdo al modulo. Esto funciona muy bien. La cuestión es que tratando de optimizar ...
  #1 (permalink)  
Antiguo 13/01/2011, 08:03
 
Fecha de Ingreso: marzo-2006
Mensajes: 47
Antigüedad: 18 años, 1 mes
Puntos: 0
Deshabilitar render desde un Plugin

Hola.
Tengo un plugin que me carga el layout correspondiente de acuerdo al modulo. Esto funciona muy bien. La cuestión es que tratando de optimizar un poco mas las cosas se me ocurrrió detectar en ese plugin si el request es de ajax o no.... si es de ajax deshabilito el layout y hago que no renderice la vista.

1) Me parece que esta es la forma mas optima de hacerlo pero no estoy seguro. Generalmente lo que he estado haciendo es poniendo en cada controller una comprobación del request y ahi ver si deshabilito o no, pero me parece que no es una solución muy optima que digamos.... Lo venia haciendo así, en cada controller:
Código PHP:
public function init(){
        if(
$this->getRequest()->isXmlHttpRequest()){
            
$this->_helper->getHelper('layout')->disableLayout();
            
$this->_helper->viewRenderer->setNoRender();
        }
    } 
2) He intentado que no renderice la vista desde el plugin pero no puedo. Me sigue tirando el error de que esta buscando la vista (archivo.phtml) correspondiente al action que se llamó. Este es el último código que probé en el plugin:
Código PHP:
public function preDispatch(Zend_Controller_Request_Abstract $request) {
        if(
$request->isXmlHttpRequest()){
            
Zend_Layout::getMvcInstance()->disableLayout();
            
$viewRenderer Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
            
$viewRenderer->setNoRender();
        }else{
            
// el código para ver que layout tiene que cargar
        
}

Muchas gracias por cualquier ayuda que puedan darme
  #2 (permalink)  
Antiguo 13/01/2011, 10:26
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: Deshabilitar render desde un Plugin

Hola Gustavo.

Yo te recomendaria hacer uso del contextSwitch en el controller. Con esto podrias dejar tu plugin de Layout mas simple y menos propenso a errores.

Es mejor tener una clase/objeto que se encargue de una sola cosa y lo haga bien, a tener una clase que haga todo y tenga errores.


Saludos.
__________________
I see dead pixels
  #3 (permalink)  
Antiguo 13/01/2011, 10:52
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Deshabilitar render desde un Plugin

Mmm, estas seguro que es un buen planteamiento GustavoV ?, todas tus respuetas AJAX van a estar vacias ?, minimo ante cualquier peticion AJAX deberias devolver un ok | ko, igualmente lo que no debe funcionar es el setNoRender.
  #4 (permalink)  
Antiguo 13/01/2011, 11:32
 
Fecha de Ingreso: marzo-2006
Mensajes: 47
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: Deshabilitar render desde un Plugin

todas mis peticiones ajax van a devolver un json. generalmente en los actions cuyo request es de ajax lo devuelvo con
Código PHP:
$this->getResponse()->setHeader('Content-Type','application/json');
$this->getResponse()->setBody(Zend_Json::encode($respuesta)); 
El tema es que no quiero poner en cada action "ajax" el:
Código PHP:
$this->_helper->getHelper('layout')->disableLayout();
$this->_helper->viewRenderer->setNoRender(); 
Puedo poner en el init de cada controller la verificación del tipo de petición. Pero pense que usar el plugin seria mas optimo.

No he visto en detalle el tema de contextSwitch pero no se usa para cambiar el contexto de cada action (o sea que un action puede devolver o un json o un xml, etc)?
En mi caso el action siempre va a devolver un json por eso en un principio descarté esta opcion. Tal vez le esté errando al concepto.
Asi que si me pueden orientar, estaré muy agradecido.
  #5 (permalink)  
Antiguo 13/01/2011, 11:49
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Deshabilitar render desde un Plugin

Y porque no utilizas el action helper json ?, que deshabilita las vistas y setea los headers correspondientes.

Última edición por masterpuppet; 13/01/2011 a las 11:55
  #6 (permalink)  
Antiguo 13/01/2011, 12:02
 
Fecha de Ingreso: marzo-2006
Mensajes: 47
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: Deshabilitar render desde un Plugin

Me mataste, jaja...... lo único que puedo decir es que tengo que volver a leer la documentación.
Se ve que cuando necesité mandar las cosas por json busque la clase y me quede ahi, no investigué mas de helpers ni de nada.

Me hice un quilombo al pedo......

Muchas gracias!

Etiquetas: deshabilitar, plugin, render
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:29.