Imprimir con Yii

Buenas, soy algo nuevo con yii framework y estoy pasando las aplicaciones web que he hecho de php natural a funciones a este mvc framework, pero tengo un problema.

Yo con mi antiguo programa genero una vista que es una factura digital marquetiada en html y con el boton javascript simplemente la imprimo, pero ahora con Yii. No sabria como se puede hacer eso. que al darle me imprima la factura sin necesidad que me muestre el menu los operadores etc…

Me pueden dar una orientacion?

El sistema de vistas de yii funciona de la siguiente forma por defecto, al crear una aplicación nueva mediante el terminal:

  • Los layouts utilizados por toda la aplicación se encuentran en [font="'Courier New"]protected/views/layouts/[/font].
  • Un layout debe utilizar la variable [font="'Courier New"]$content[/font] para mostrar los datos que uno envía a la vista.
  • Por defecto, [font="'Courier New"]main.php[/font] es el layout padre de [font="'Courier New"]column1.php[/font] y [font="‘Courier New"]column2.php[/font]. Dependiendo de la vista en la que se está, se utiliza uno u otro. Si revisas el código en cualquiera de esos dos layouts hijos, verás que llaman a su layout padre con la linea [font="‘Courier New"]<?php $this->beginContent(’//layouts/main’); ?> [/font]que se encuentra al comienzo.
  • Puedes personalizar este esquema a gusto, a fin de utilizar tus propias vistas.

Por tanto, la forma fácil es crear una layout exclusiva para impresión (puedes ponerla en [font="'Courier New"]protected/views/layouts/imprimir.php[/font]). Este layout lo puedes utilizar cada vez que desees imprimir. Luego para imprimir específicamente la factura, creas otra vista dentro de, por ejemplo, el directorio que aloja las vistas del controlador FacturaController (ej: [font="'Courier New"]protected/views/factura/imprimirFactura.php[/font]). Cabe señalar que no es necesario agregar la llamada al método [font="'Courier New"]beginContent() [/font]desde imprimir.php como lo hacen column1.php o column2.php, puesto que no utilizaras el archivo main.php (que es el que genera la mayoría de la estructura de la página, como el menú, cuerpo y pie de página).

Luego, en la acción que utilizarás para imprimir, usas algo como lo siguiente:




public function actionImprimir($id) {

	$this->layout='//layouts/imprimir'; // defines el archivo protected/views/layouts/imprimir.php como layout por defecto sólo para esta acción.


	$factura = Factura::model()->findByPk($id); // agregas el código a ejecutar que cargará los datos que enviarás a la vista y que generarán tu factura


	$this->render('imprimirFactura', array("factura" => $factura)); // envías la vista imprimirFactura con los respectivos datos al layout antes especificado

}



Lecturas recomendadas:

Por supuesto, hay otras alternativas más complejas, como generar un archivo PDF usando alguna de las librerías que se encuentran en Internet, permitiendo así al usuario ya sea descargar el archivo o imprimirlo.