TUTORIAL YII FRAMEWORK (CAPÍTULO 11) – EXPORTAR DEL CGRIDVIEW A PDF

Si queremos exportar registros del Cgridview a pdf a continuación te explicamos como. Lo primero que hacemos es bajarnos la ultima versión de MPDF aqui https://rapidshare.com/files/4038705402/MPDF54.zip y la colocamos en protected/extensions, copiamos en el controlador de la tabla a la que se hará el reporte la siguiente función:

public function actionPdf($id)
{
$this->render('pdf',array(
'model'=>$this->loadModel($id),
));
}

Colocamos pdf en la funcion accessRules() del mismo controlador para que los usuarios puedan acceder a la acción , en la vista admin sustituir el arreglo de los botones por el siguiente:

array(
'class'=>'CButtonColumn',
'template' => '{view} {update} {delete} {pdf}',
'buttons'=>array(
'pdf' => array(
'label'=>'Generar PDF',
'url'=>"CHtml::normalizeUrl(array('pdf', 'id'=>\$data->id
))",
'imageUrl'=>Yii::app()->request->baseUrl.'/images/pdf_icon.png',
'options' => array('class'=>'pdf'),
),
),
),

En la vista view agregamos la vista de nuestro pdf en el menu:

array('label'=>'Crear PDF', 'url'=>array('pdf','id'=>$model->id)),

en este caso la clave primaria del registro la puse como id en la base de datos, si en tu caso es “id_producto” o algo por el estilo debes cambiarlo cuando se pasa el dato a la vista.

Y por ultimo tenemos el archivo pdf.php que estará en las vistas:

<?php
$pdf = Yii::createComponent('application.extensions.MPDF52.mpdf');
$html='
<table id="yw0" class="detail-view2">
<tr class="principal">
<td colspan="2" align="center"><b>DATOS DEL CONTRATO</b></td>
<tr>
<tr class="odd">
<td> <b>N° Control</b> </td>
<td> '.$model->num_control.'</td>
</tr>
<tr class="even">
<td> <b>Trimestre Ejecucion</b> </td>
<td> '.$model->trimestre_ejecucion.'</td>
</tr>
<tr class="odd">
<td> <b>Nombre Estado</b> </td>
<td> '.$model->estado0["nombre_estado"].'</td></tr>
<tr class="even">
<td> <b>Empresa</b> </td>
<td> '.$model->empresa.'</td>
</tr>
<tr class="odd">
<td> <b>Personal Actuante</b> </td>
<td> '.$model->personal_actuante.'</td></tr>
<tr class="even">
<td> <b>Nombre Tipo Informe</b> </td>
<td> '.$model->informe0["nombre_tipo_informe"].'</td>
</tr>
<tr class="even">
<td> <b>N° Contrato</b> </td>
<td> '.$model->num_contrato.'</td>
</tr>
<tr class="odd">
<td> <b>Monto Contratado</b> </td>
<td> '.$model->monto_contratado.'</td>

</tr>
</table>';
//$header='<img src="'.Yii::app()->request->baseUrl.'/images/banner.png"/>';
$mpdf=new mPDF('win-1252','LETTER','','',15,15,25,12,5,7);
$mpdf->SetHTMLHeader($header);
$mpdf->SetFooter(' {DATE j/m/Y}|Página {PAGENO}/{nbpg}|Sistema de Contratos');
$mpdf->WriteHTML($html);
$mpdf->Output('Ficha-Contrato.pdf','D');
exit;
?>

Anuncios

Publicado el 27/01/2012 en Yii Framework. Añade a favoritos el enlace permanente. 9 comentarios.

  1. Hola! que bueno tu tuto… me gusta yii aunque soy nuevo… por cierto tengo un problema con una validación y no doy con la solución. Te cuento: quiero controlar por un atributo “cedula” que el usuario no se repita al registrarse. Lo hice de esta manera pero al validar aun dejando el campo correspondiente en blanco me dice que ya existe!!!. Quisiera saber qué puede estar pasando alli. Gracias… 🙂

    =>en el modelo coloque esta función

    public function existe()
    {
    $sql = “SELECT cedula FROM usuario WHERE cedula = :cedula”;
    $comando = Yii::app() -> db -> createCommand($sql);
    $cedula = $this ->cedula;
    $comando -> bindParam(“:cedula”, $cedula, PDO::PARAM_INT);
    return ($comando -> queryScalar() == $this -> cedula);
    }

    => en la función “create” del controlador de usuario coloqué esto:

    public function actionCreate()
    {
    $model = new usuario;

    // Uncomment the following line if AJAX validation is needed
    //$this->performAjaxValidation($model);

    if (isset($_POST[‘usuario’]))
    {
    //$usuario = new usuario;
    $model->attributes = $_POST[‘usuario’];
    $model->password=md5($model->password);

    if($model->existe())
    {
    //if ($model->save())
    //$model->password=md5($model->password);
    //$this->redirect(array(‘view’, ‘id’ => $model->id_usuario));
    $model -> addError(‘cedula’, ‘este usuario ya existe ‘.’inténtelo nuevamente’);
    }
    else
    {
    //$model->password=md5($model->password);
    if ($model->save())

    $this->redirect(array(‘view’, ‘id’ => $model->id_usuario));

    //$model -> addError(‘cedula’, ‘este usuario ya existe ‘.’inténtelo nuevamente’);
    }

    }

    $this->render(‘create’, array(‘model’ => $model,)) ;
    }

    • saludos amigo, si quieres hacer que el campo cedula nunca se repita debes modificar las validaciones, eso se explcia en este capitulo https://gabrielduarte77.wordpress.com/2012/01/26/tutorial-yii-framework-capitulo-7-validando-los-formularios/

      Saludos

      • Vaya! 🙂 Gracias!!!… me estaba complicando la vida con esa función “existe” que tenía en mi controlador. Sabes me he dado cuenta que cuando le doy guadar sin haber ingresado algún dato entonces me trae la clave en md5 de una vez, se supone que no debería hasta haber verificado todos los datos no?… esto es un problema porque entonces obligaria a borrar todos los puntos negros y volver a escribir la contraseña lo cual para un usuario común seguro no entienda. He movido despúes del save() la linea de codigo que hace el md5 pero no logro hacer que me lo traiga en blancoy que al mismo tiempo me lo valide, es decir, que no pueda ser nulo. te muestro:

        public function actionCreate()
        {
        $model = new usuario;

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if (isset($_POST[‘usuario’]))
        {
        $model->attributes = $_POST[‘usuario’];

        if ($model->save())
        {

        $this->redirect(array(‘view’, ‘id’ => $model->id_usuario));
        }
        else
        {
        //$model->password=$pwd;
        // $model->password=null;

        $model->password=md5($model->password);
        }

        }

        $this->render(‘create’, array(‘model’ => $model,));

        }

    • escribeme tu caso el correo, no entendi lo que quisiste decir, gracias

  2. No comprendo a que te refieres cuando dices lo siguiente:

    <>

  3. en donde se guarda la imagen.?D:: por ejemplo en tu caso pusiste …/images/banner.pgn
    cual es la dirección completa de la ubicación de la imagen?

  4. Hola sabrás como se anexa una pagina nueva a un documento pdf creado con mpdf.???

    Tengo un bucle en el que quisiera ir creando tantas páginas como sea necesario, pero solo e conseguido imprimir la variable que contiene el html sin control sobre las páginas.

Tu Opinión es Importante, Comenta!

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s