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

Obtener el contenido de la vista en el controlador

Estas en el tema de Obtener el contenido de la vista en el controlador en el foro de Zend en Foros del Web. Hola Estoy tratando de generar un pdf con dompdf y ZF, y necesito capturar el contenido de la vista en el controlador y pasarlo a ...
  #1 (permalink)  
Antiguo 18/02/2011, 12:50
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 3 meses
Puntos: 2
Pregunta Obtener el contenido de la vista en el controlador

Hola

Estoy tratando de generar un pdf con dompdf y ZF, y necesito capturar el contenido de la vista en el controlador y pasarlo a un método del mismo controlador para generar el pdf, mi pregunta es como puedo asignar el contenido de una vista a una variable, cuando hice las pruebas tuve que desactivar la vista con el helper viewRenderer y el metodo setNoRender(true) ya que sino no me funcionaba.

Saludos
  #2 (permalink)  
Antiguo 18/02/2011, 13:28
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años, 6 meses
Puntos: 60
Respuesta: Obtener el contenido de la vista en el controlador

Es sencillo :) algun dia tuve que hacer eso.. :D

Código PHP:
$variable $this->view->render('vista.phtml'); 
Así me funciono :D el código de mi Action

Código PHP:
$this->getHelper('layout')->disableLayout();
$this->getHelper('ViewRenderer')->setNoRender();
        require_once(
"dompdf_config.inc.php");
        
Zend_Loader::registerAutoload();
    
spl_autoload_register('DOMPDF_autoload');
    
$output $this->view->render('concursantes/getfinalpdf.phtml');
        
$dompdf = new DOMPDF();
    
$dompdf->load_html($output);
    
$dompdf->render();
    
$dompdf->stream("reporte_final_".$usuario.".pdf");
    
$pdf $dompdf->output(); 
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador

Última edición por _ssx; 18/02/2011 a las 13:39 Razón: Mejor explicación
  #3 (permalink)  
Antiguo 18/02/2011, 15:49
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: Obtener el contenido de la vista en el controlador

Ahh algo sucio, yo uso un plugin junto con html2pdf:
Código PHP:
Ver original
  1. class Application_Plugin_PdfExport extends Zend_Controller_Plugin_Abstract
  2. {
  3.     private $_exportName = '';
  4.     public function __construct($sExportName)
  5.     {
  6.         $this->_exportName = $sExportName;
  7.     }
  8.    
  9.     public function dispatchLoopShutdown()
  10.     {
  11.         $sExportName = $this->_exportName;
  12.         $Response = $this->getResponse();
  13.         $Response->setHeader('Pragma', 'Public')
  14.                  ->setHeader('Cache-Control', 'no-store, no-cache, must-revalidate')
  15.                  ->setHeader('Cache-Control', 'pre-check=0, post-check=0, max-age=0')
  16.                  ->setHeader('Pragma', 'no-cache')
  17.                  ->setHeader('Expires', '0')
  18.                  ->setHeader('Content-Transfer-Encoding', 'binary')
  19.                  ->setHeader('Content-Type', 'application/pdf')
  20.                  ->setHeader('Content-Disposition', "attachment; filename=\"$sExportName\"");
  21.  
  22.         $sContent = utf8_decode($Response->getBody());
  23.        
  24.         error_reporting(E_ALL ^ E_DEPRECATED);
  25.         require('html2pdf/html2fpdf.php');
  26.         $pdf=new HTML2FPDF();
  27.         $pdf->AddPage();
  28.         $pdf->WriteHTML($sContent);
  29.         $sPDF = $pdf->Output('', 'S');
  30.        
  31.         $Response->setBody($sPDF);
  32.     }
  33. }

Después simplemente desde mi controller reviso si tengo que hacer el render en HTML o en PDF (útil para algunos reportes verlos en HTML o en PDF):
Código PHP:
Ver original
  1. $this->view->data = $aData;
  2.     if ($formato == self::FORMATO_PDF) {
  3.         // Disable Layout
  4.         $layout = Zend_Layout::getMvcInstance();
  5.         $layout->disableLayout();
  6.    
  7.         // Register Excel Export Plugin
  8.         $front = Zend_Controller_Front::getInstance();
  9.         $front->registerPlugin(new Application_Plugin_ExcelExport($sExportName), 101);
  10.     }

Saludos.
  #4 (permalink)  
Antiguo 18/02/2011, 16:58
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Obtener el contenido de la vista en el controlador

Hola Muchahos

Gracias por la respuestas, me gusto la forma en que desarrollaste la situacion GatorV, quisiera desarrollarlo como tu lo hiciste, me podrias orientar.

Consultas.
1.- Donde guardo el plugin.
2.- En la vista donde muestro el "informe" debo tener un botón para importarlo a PDF.
3.- Si tengo un botón que apunta a una acción debo crearla, entonces en esa acción debería llamar al plugin o no? y como lo llamo y se mostraría el pdf en vez de la vista phtml.
4.- la librería que ocupas es open source o hay que pagar.
5.- Como sabes que formato mostrar si PDF o HTML, eso deberia venir como paramtro en el request al presionar algun boton.

Saludos

Última edición por Fenris; 18/02/2011 a las 18:09
  #5 (permalink)  
Antiguo 18/02/2011, 21:25
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Obtener el contenido de la vista en el controlador

1. La ruta la dice la clase Application_Plugin_PdfExport es decir application/plugins/PdfExport.php (importante la letra s al final de plugins, de esa forma es que Zend lo busca).
Ahora, en esta parte lo más probable que se confundió y añadió la que no era
Código PHP:
Ver original
  1. $front->registerPlugin(new Application_Plugin_ExcelExport($sExportName), 101);
Entiendo que debería ser
Código PHP:
Ver original
  1. $front->registerPlugin(new Application_Plugin_PdfExport($sExportName), 101);

Del 2 al 5, podrías colocar la clase dentro de un condicional y llamar de nuevo la dirección añadiendo un valor que reconozca el condicional. Algo como
Código PHP:
http://localhost/controlador/action/valorParaElCondicional 
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 18/02/2011 a las 21:34
  #6 (permalink)  
Antiguo 18/02/2011, 21:59
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Obtener el contenido de la vista en el controlador

GatorV

Consultas.
  1. El formato a mostrar PDF o HTML, eso debería venir como parámetro en el request al presionar el botón en la vista que quiero presentar para la visualización como reporte.
  2. El plugin se llamaría en la misma vista del controlador que quiero pasar como reporte. por ej. yo muestro un formulario donde terminan de completar información de una evaluación medica y guardan los cambios, al guardarse los cambios se carga la vista nuevamente, esta vista tiene un par de botones para mostrar informes y un selector de formatos (PDF /HTML) si el usuario hace click en el boton vista previa y selecciona PDF llama al controlador y la action preview (ejemplo) esta acción debería verificar el formato y cargar la "vista" en formato PDF o HTML con el plugin, dberia pasarle el modelo a la vista para iterarlos y mostrar el reporte. eso es lo que hace el plugin

Gracias abimaelrc, voy a revisarlo y te comento algunas cosas es que estoy tratando de entender como funciona para implementarlo en mi aplicación ya que recién estoy aprendiendo ZF

Saludos

Última edición por Fenris; 18/02/2011 a las 22:20 Razón: cambios en las preguntas
  #7 (permalink)  
Antiguo 19/02/2011, 17:23
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Obtener el contenido de la vista en el controlador

GatorV

La vista la renderizas?, lo que pasa es que yo llamo a un action preview desde un boton en el view( edit.phtml), en el action previewAction implemento lo que tienes en la vista verificando si solicito la vista en PDF o HTML, pero me arroja un error que "acrobat no pudo abrir el archivo debido a que no es un archivo reconocido o esta dañado", me da la impresión de que esto sucede porque se envían cabeceras antes de que genere el pdf.

Esto es lo que tengo en el action
previewAction

Código PHP:
Ver original
  1. $sExportName = 'Preview_'.trim(str_replace('-','', $rut)).'_'.$rnd; //nombre del archivo
  2. $model       = new Application_Model_EvaluacionInicial();
  3. $evaluacion     = $model->find($rut, false);
  4.                 if( count($evaluacion) > 0 )
  5.                 {
  6.                     $this->view->evaluacion = $evaluacion;
  7.                     $this->view->clinica = $config->general->clinica;
  8.  
  9.                     if($format == self::FORMATO_PDF):
  10.                         $this->_helper->layout->disableLayout();
  11.                         $front = Zend_Controller_Front::getInstance();
  12.                         $front->registerPlugin(new Application_Plugin_PdfExport($sExportName), 101);
  13.                     else:
  14.                                                  //renderiza la vista HTML
  15.                         $this->view->render('/evaluacion-inicial/preview.phtml');
  16.                     endif;
  17.                 }

La vista es preview.html en esta vista recibo el modelo y lo muestro.

Saludos

Última edición por Fenris; 19/02/2011 a las 18:35
  #8 (permalink)  
Antiguo 20/02/2011, 10:14
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: Obtener el contenido de la vista en el controlador

Si tienes que renderizar la vista, esto es porque lo que hace el plugin es tomar el HTML generado, y convertirlo a PDF, es por eso que tienes que hacer el render y al final el plugin recoge el HTML y lo transforma a PDF.

Saludos.
  #9 (permalink)  
Antiguo 20/02/2011, 11:51
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Obtener el contenido de la vista en el controlador

Hola GatoV

Gracias me ha sido de mucha utilidad ya he conseguido que funcione, había llegado a la misma conclusión que me señalas el problema es que tenia un problema con la librería pdf probé con dompdf y funciono muy bien, quizás la tabla que tenia codificada no era renderizada correctamente por la librería html2pdf y eso daba error.

Consulta para implementar la funcionalidad de gráficos hay que hacer algo como lo de exportar a pdf igual o sea un plugin o algo así, tu haz trabajado con gráficos y ZF

Saludos
  #10 (permalink)  
Antiguo 20/02/2011, 19:59
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: Obtener el contenido de la vista en el controlador

Eso depende mucho de tu librería que uses ya que es la encargada de renderizar el grafico dentro de tu PDF.

Saludos.

Etiquetas: contenido, controlador, vistas
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 17:50.