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

Modificar View Script - ZF 1.11

Estas en el tema de Modificar View Script - ZF 1.11 en el foro de Zend en Foros del Web. Que tal compañeros, vengo a solicitar su ayuda para ver como solucionar un problema que tengo, no se si mi problema sea realmente de código ...
  #1 (permalink)  
Antiguo 07/06/2012, 10:46
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Modificar View Script - ZF 1.11

Que tal compañeros, vengo a solicitar su ayuda para ver como solucionar un problema que tengo, no se si mi problema sea realmente de código o sea un problema de concepto...

Estoy trabajando en un sitio que internamente trabaja a base de Ajax para evitar estar recargando el sitio entero mas a aparte es necesario ya que se mantiene una conexión "persistente" via NodeJS por lo cual es imperativo evitar estar reconectando, el "problema" es que el usuario puede acceder a cualquier parte del sitio directamente tecleando la url (uso pushstate y hashbang) por lo cual también es importante que si la petición es directa por el usuario (accediendo directamente a la URL) ZF sea capas de renderizar el layout y sus vistas, sin embargo, si es una petición via Ajax ZF debe evitar que se renderize el layout y aquí es donde comienza mi odisea...

Cada vez que se hace una petición via Ajax debo deshabilitar el layout, mas aparte, debo cambiar la vista del action al que se le esta haciendo la petición ya que debo generar un XML que consta del contenido HTML (el contenido normal vamos), mas aparte verificar si es necesario cargar algún CSS externo para la correcta visualización del código HTML generado, para que quede mas claro dejo un ejemplo...

view script...
Código HTML:
Ver original
  1. <div id="contenido">
  2.      <p>Este es un div de prueba</p>
  3. </div>

Si es una petición normal (no ajax) deberá visualizarte tal cual, sin cambios, pero si es una petición ajax deberá mostrarse de la siguiente manera...

Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <data>
  3.      <content>
  4.           <![CDATA[
  5.               <div id="contenido">
  6.                    <p>Este es un div de prueba</p>
  7.               </div>
  8.          ]]>
  9.      </content>
  10.      <scripts>
  11.           <css>/css/archivo.css</css>
  12.      </scripts>
  13.      <title>
  14.           Titulo del action
  15.      </title>
  16. </data

La forma en que pensé solucionar esto es creando un view helper que recogiera el contenido del view script y dependiendo de una variable boolean mostrar de una u otra forma, ejemplo....

view script...
Código PHP:
Ver original
  1. $content = <<<HTML
  2. <div id="contenido">
  3.      <p>Este es un div de prueba</p>
  4. </div>
  5. HTML;
  6.  
  7. echo $this->Ajax($content,$this->ajax);

lo que hace el view helper es que si $this->ajax es true genera el XML, si es false solo hace un echo directo a $content, lo que ahora quiero/necesito es automatizar por lo tanto evitar tener que estar metiendo el código del view script en una variable, y estar agregando manualmente el view helper a cada action, por lo tanto estaba pensando crear un action helper y en el metodo postDispatch obtener el código ya generado del view script y emular el trabajo del view helper que ya tengo hecho, la otra manera era crear un view personalizado con zend_view_abstract, pero realmente no se que es mejor o si lo que planteo es viable...

Agradezco cualquier ayuda/consejo que me puedan dar
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 07/06/2012 a las 10:51
  #2 (permalink)  
Antiguo 07/06/2012, 10:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Modificar View Script - ZF 1.11

Zend tiene desde hace bastante tiempo el AjaxContext helper, que te permite precisamente hacer todo eso que quieres hacer.

Saludos.
  #3 (permalink)  
Antiguo 07/06/2012, 11:13
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Modificar View Script - ZF 1.11

Gracias GatorV por el dato, no había visto este Helper, leeré la documentación y vere que puedo hacer!
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #4 (permalink)  
Antiguo 07/06/2012, 11:43
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Modificar View Script - ZF 1.11

Lamento molestar de nuevo, eh estado leyendo la documentación y eh visto que aparte de necesitar enviar la petición con la cabecera XmlHttpRequest es necesario enviar la variable GET format especificando el formato en el que se desea que ZF entregue el contenido, esto lo veo muy practico si necesito entregarlo en varios formatos, pero en mi caso todo será en XML, mi pregunta final es, hay alguna forma de evitar pasar la variable "format" y que unicamente detectando la cabecera "XmlHttpRequest" AjaxContext cambie la vista a la que genera el XML?
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #5 (permalink)  
Antiguo 07/06/2012, 12:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Modificar View Script - ZF 1.11

Viendo el código parece que no, ya que usa la variable format que viene de GET para decidir en que formato regresar la respuesta.

Lo que sí podrías hacer es antes de inciar el contextSwitch agregar manualmente la variable, por ejemplo:
Código PHP:
Ver original
  1. <?php
  2. public function init() {
  3.        if ($this->getRequest()->isXmlHttpRequest()) $this->getRequest()->setParam('format', 'xml');
  4.  
  5.       // Context switch init...
  6. }

Saludos.
  #6 (permalink)  
Antiguo 07/06/2012, 14:07
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Modificar View Script - ZF 1.11

Como siempre efectiva y practica la ayuda, te agradezco GatorV
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #7 (permalink)  
Antiguo 07/06/2012, 20:49
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Modificar View Script - ZF 1.11

Y porque no le pasas el contexto directamente a initContext ?, si yo no recuerdo mal se podía hacer algo así:

Código PHP:
Ver original
  1. public function init()
  2. {        
  3.     $this->_helper->ajaxContext()
  4.                   ->addActionContext('index', 'xml')
  5.                   ->initContext('xml');
  6. }
__________________
http://es.phptherightway.com/
thats us riders :)

Etiquetas: modificar, view
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 08:45.