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

Intercambiar datos con Zend(o con PHP)

Estas en el tema de Intercambiar datos con Zend(o con PHP) en el foro de Zend en Foros del Web. Hola amigos. Estoy utilizando Zend Framework y les cuento mi problema. Tengo una sección que muestra noticias: http://midominio.com/contenido/1 donde "contenido" es el controlador, "ver" es ...
  #1 (permalink)  
Antiguo 23/06/2011, 08:30
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Intercambiar datos con Zend(o con PHP)

Hola amigos.

Estoy utilizando Zend Framework y les cuento mi problema.

Tengo una sección que muestra noticias: http://midominio.com/contenido/1 donde "contenido" es el controlador, "ver" es la acción(en la dirección se pasa de manera implícita) y el número es un atributo 'id' que representa el identificador de la noticia a visualizar.

En la acción 'ver' tengo lo siguiente:
Código PHP:
$contenido = new Application_Model_Contenido(); --donde $contenido es un objeto que guarda en sus atributos el títulocontenidofechaetcde la noticia que se va a visualizar
Código PHP:
 $sesion = new Zend_Session_Namespace('contenido');
 
$sesion->contenido $contenido
Ahora he guardado el objeto en una variable de sesión.

Hasta aquí todo guay.

En el view de la noticia(es decir, la página donde se muestra la noticia: http://midominio.com/contenido/1) tengo una imagen que enlaza a una dirección que genera un PDF del contenido:
Código HTML:
<a href="<?= $this->baseUrl() ?>/contenido/crearpdf"><div class="ContentTask" id="print" title="Versión para imprimir"></div></a> 
Al pulsar la imagen se activa la acción 'crearpdf' donde tengo:
Código PHP:
 $sesion = new Zend_Session_Namespace('contenido');
$sesion->contenido->crearPdf(); 
Es decir, que recoge el objeto que almacené en la sesión y genera un PDF.

¿Cuál es el problema?
Si abro dos páginas(o más) tal que primero visito http://midominio.com/contenido/1 y a continuación (en una ventana aparte) http://midominio.com/contenido/2 en la variable de sesión estará contenida SÓLO la información de la última noticia visitada, por lo tanto, al pulsar el botón para crear un PDF desde la ventana de la PRIMERA noticia se generará el PDF de la segunda.

¿Cómo lo soluciono?
Había pensado en crear un formulario y pasar los datos mediante POST a través de un formulario. Pero lo veo un poco tedioso pues tendría que maquetar de nuevo el diseño de la web para que quedara todo bien integrado.

También en crear el pdf haciendo así el enlace: http://midominio.com/contenido/crearpdf/1, pero esto provocaría volver a consultar los datos de la noticia en la base de datos y no veo una buena solución volver a hacer esto. También podría utilizar ese 'id' como el índice de un array de sesión que contenga objetos de noticias, pero veo absurdo ir llenando variables de sesión con información que se va a utilizar de media una vez o ninguna por sesión/usuario.

¿Ven alguna solución? Me gustaría pasar la info sin tener que enredar en el view de la noticia, me gustaría controlarlo todo desde el controlador(valga la redundancia).
  #2 (permalink)  
Antiguo 24/06/2011, 03:14
Avatar de fbedia88  
Fecha de Ingreso: enero-2011
Ubicación: Santander
Mensajes: 83
Antigüedad: 13 años, 3 meses
Puntos: 20
Respuesta: Intercambiar datos con Zend(o con PHP)

En esta linea:
Código PHP:
<a href="<?= $this->baseUrl() ?>/contenido/crearpdf"><div class="ContentTask" id="print" title="Versión para imprimir"></div></a>
quizas podrias poner en /contenido/crearpdf el id a pelo?

Es decir, no puedes crear una variable por ejemplo $mi_id la cual valdria 1 y ponerla en /contenido/crearpdf/<?php echo $mi_id ?>

Para la nueva ventana la variable valdra 2.... o si la noticia tiene el id 8 pues valdra 8.

Esto te funcionaria siempre y cuando tanto para ver la noticia como para generar el PDF sea el mismo id (que creo qe en tu caso si)
  #3 (permalink)  
Antiguo 24/06/2011, 03:28
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Respuesta: Intercambiar datos con Zend(o con PHP)

Hola

Ok, ahora me encuentro en el script /contenido/crearpdf/ con la variable $mi_id que vale 1. ¿Y ahora qué hago? Quiero decir, ¿cómo recojo el objeto que creé y almacené en la variable de sesión(piensa que el objeto lo creé en un script diferente)? Es más, recoger el objeto no es problema, pues ya lo hago en mi solución actual, el problema es ¿cómo recojo el objeto, concretamente, el de la noticia 1? Ahora sólo puedo obtener el de la ÚLTIMA noticia consultada (siempre y cuando haya más de una ventana abierta a la vez) pues la info se guarda en una variable de sesión. Con eso de la variable $mi_id lo único que se me ocurra es crear una variable de sesión que contenga un array de objetos donde $mi_id indica la posición del objeto dentro del array. Pero iría llenando un array de objetos cada vez que consultara una noticia para la cual tal vez nunca llegara a generar un PDF.

Si soluciones hay varias, pero antes de aplicar una me gustaría encontrar la ideal, que sería:
Cada vez que pulse el enlace /contenido/crearpdf desde un script /contenido/ éste último le envíe un objeto con la información sobre el contenido(noticia).

Es que no sé si entendí muy bien tu solución. Si pudieras extenderla un poco más te lo agradecería mucho. Aunque creo que te refieres a lo que expongo en el penúltimo párrafo de mi primer mensaje en este tema :D

Saludos!
  #4 (permalink)  
Antiguo 24/06/2011, 03:57
Avatar de fbedia88  
Fecha de Ingreso: enero-2011
Ubicación: Santander
Mensajes: 83
Antigüedad: 13 años, 3 meses
Puntos: 20
Respuesta: Intercambiar datos con Zend(o con PHP)

ummm... pues si, lo que te proponia era al final lo que habias puesto en el anteultimo párrafo del primer post. Disculpa, no lo habia entendido bien.

La verdad es que parece bastante complicado... yo la verdad que ando un poco perdido porque no he trabajado nunca con Zend pero bueno, lo entiendo...

Haber si me aclaro... si no me equivoco el problema esta en la SESION ya que al abrir la 2º pestaña te cambia la variable y en la pestaña 1 te genera el PDF de la dos...
pues si es asi... lo veo complicado... y si tendras que buscar una de las soluciones que planteas aunque quizas como tu digas no sean las mas optimas... aunque tengas que volver a generar la consulta a la BD.... esque sino no veo otra solucion.


Cita:
Es más, recoger el objeto no es problema, pues ya lo hago en mi solución actual, el problema es ¿cómo recojo el objeto, concretamente, el de la noticia 1?
No se si sera posible pasar objetos por sesion o cokkie... pero si es asi, no podrias generarte una sesion que se llame $_SESSION["auxiliar_$mi_id"] = "el objeto a pasar"; y despues en la noticia pues recogerla... y destruir la sesion?

Se te generarian tantas sesiones como pestañas abras (auxiliar_1, auxiliar_2, auxiliar_8) pero tendrias un patron para recogerlas....


-----------------------------


no se si sera viable... pero bueno, sino no se me ocurre otra forma

Un saludo
  #5 (permalink)  
Antiguo 24/06/2011, 04:10
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Respuesta: Intercambiar datos con Zend(o con PHP)

Hola de nuevo fbedia88!

Sí, también había pensado en esta última solución. ¿Pero sabes qué ocurre si destruyo la sesión? Imaginemos lo siguiente:
1- Visito una noticia, en la variable de sesión se guarda la noticia.
2- Creo el PDF de esa noticia. Y una vez creado destruyo la sesión. Con esto tengo todo lo que quería: el PDF y encima no ocupo espacio en memoria innecesariamente, destruí la sesión.
3- Me mantengo en la página de la noticia, cerré el PDF sin querer, así que decido volver a generarlo. ¿Qué sucede? Pues que no se genera nada, eliminé la sesión anteriormente y hasta que no recargue la página no se volverá a crear.

Esta última solución sería buena si y solo si borrara la sesión al SALIR de la página de noticia. Pero creo que aquí ya entran en juego otros lenguajes de programación.

En fin, la verdad es que sí que es un poco enfarragoso. Creo que optaré por alguna de las soluciones que hemos propuesto. Total, es una web que tendrá muy poca carga.

Gracias por tu tiempo amigo :)
  #6 (permalink)  
Antiguo 24/06/2011, 04:40
Avatar de fbedia88  
Fecha de Ingreso: enero-2011
Ubicación: Santander
Mensajes: 83
Antigüedad: 13 años, 3 meses
Puntos: 20
Respuesta: Intercambiar datos con Zend(o con PHP)

Ups!



bueno... sea cual sea la opción que elijas lo conseguirás ;)

Espero ver como lo haces!

Haber si alguien mas se pasa y nos ilumina con otra posible solución!

Un saludo.
  #7 (permalink)  
Antiguo 24/06/2011, 05:46
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: Intercambiar datos con Zend(o con PHP)

Que tal kiko's,

No comprendo porque estas haciendo algo así, porque guardar en sesión ?, deberías hacer lo que comentaste en tu primer post, pasar el id por url y atacar la bbdd de nuevo, que problema hay con hacer una query ? se rompe la bbdd ? :P

Y te sugiero que cuando postes una duda sobre FW's lo hagas en el foro correspondiente, no todos los que trabajamos con Zend revisamos esta sección del foro asiduamente.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #8 (permalink)  
Antiguo 24/06/2011, 05:56
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Respuesta: Intercambiar datos con Zend(o con PHP)

Hola masterpuppet,

No, no se rompe la bbdd jajaja, sólo era para ahorrarme una consulta. Aunque en la práctica no afecta para nada, pero si puedo seguir el camino más eficiente lo sigo. Haré lo de atacar de nuevo la bbdd, es la mejor solución, así también puedo utilizar la url para generar el pdf desde una web externa.

Ni me había dado cuenta de la existencia de esa sección, ¡muchas gracias!

Saludos :)

Etiquetas: intercambiar, php
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 14:09.