Yii Framework Forum: Incluir paginación en reporte personalizado - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Incluir paginación en reporte personalizado Incluir paginación en reporte personalizado Rate Topic: -----

#1 User is offline   Luis Guillermo Trejo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 31
  • Joined: 29-March 12

Posted 24 April 2012 - 11:11 AM

Buen día, tengo una duda en relación a como puedo incluir paginación en un reporte que he realizado de forma 100% personalizada.

Según he leído debo crear un widget, ¿cómo lo podría hacer?

Quedo atento a sus comentarios.

Muchas gracias.
0

#2 User is offline   bluyell 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 224
  • Joined: 28-October 11

Posted 25 April 2012 - 08:59 PM

Hola. Al haber hecho el reporte basandote en modelo MVC y con ayuda de este framework te hubiese bastado solamente con crear un dataProvider obtenido del modelo que representa a tu vista, y al usar el componente CListView entonces de inmediato tendrias paginador y....la capacidad de personalizar la presentacion de cada fila de la manera mas sencilla a la mas complicada.

por mas complicada que sea una vista del modelo de datos **siempre** podrá ser presentada en un modelo que yii pueda entender, cuando esto no es posible, entonces muy probablemente se este tomando la via incorrecta.

voy a asumir el siguiente caso:

si tienes una vista muy "complicada" como esta, y que además arroja 100.000 registros, por ejemplo:

select color.name, color.code,  shape.type, shape.design,  customer.name,  book.category from xrecords  
  left join color on color.idcolor = xrecords.idcolor 
  left join shape on shape.idshape = xrecords.idshape
  left join customer on customer.idcustomer = xrecords.idcustomer
  left join book on book.idbook = xrecords.idbook


lo primero que hay que olvidarse *para siempre* es andar usando el SQL directamente por todas partes, esto se simplifica
creando un modelo que represente a esa vista, y previamente crear de esa consulta de ejemplo una vista almacenada en el modelo de datos,
digamos que la llamamos: VRECORDS
"create view vrecords(colorname, shapetype, customername, bookcat) as EL_SQL_DE_ARRIBA"

lo segundo, crear un Modelo, usando el modulo Gii de YiiFramework. Este modelo se llamaría: "vrecords.php" y
contendría los atributos:

class VRecords extends CFormModel {
    public $colorname;
    public $shapetype;
    public $customername;
    public $bookcat;

   // demas codigo creado por Gii Generator module.
}



lo tercero, crear un action que busque y filtre los resultados deseados de entre esos 100.000 registros existentes
(llamarias a este action desde tu website asi: "http://tuwebsite.com/index.php?r=tucontroladora/mostrarvrecords" )

digamos:

en la controladora que tu selecciones:

public function actionMostrarVRecords(){

        // en el metodo search de VRecords puedes filtrar tus registros 
        //  usando CDbCriteria...olvidate del uso manual de SQL...o al menos, trata de usar el framework y sus clases..
      $resultados = VRecords::model()->search();   

 	// muestra los resultados en una vista
    $this->render('listavrecords',array('resultados'=>$resultados));
}



cuarto, defines la vista donde se mostraran los resultados, que luego el metodo render del action entregara al browser como un resultado HTML (tu reporte web por llamarlo de otro modo).

en la vista 'listavrecords.php', referenciada en el metodo render de tu action creado arriba, la cual residirá
en la carpeta application/protected/views/tucontroladora/listavrecords.php,

se escribe este codigo alli:

nota que $resultados es una variable que viene ya lista e inicializada, es pasada a tu vista porque tu en el metodo render la pasaste en un array, yii se encarga de pasar esa variable a tu vista....no importa si ahi hay 1.000.000 registros de resultados !!!, no estan en memoria...no estan desprotegidos...yii se encarga de eso, tu no.
<?php $this->widget('zii.widgets.CListView', array(
	'dataProvider'=>$resultados,
	'itemView'=>'_unafila',
)); ?>


y ademas como ves, requeriras crear el archivo '_unafila.php' el cual contendrá CADA FILA de tu recordset (por llamarlo de otro modo),

por ejemplo:

---inicio archivo "_unafila.php"---
<h1>Este es un Registro del cliente: <?php echo "{$data->customername}"; ?></h1>
<?php echo "color: {$data->colorname}<br/>"; ?>
<?php echo "shape: {$data->shapetype}<br/>"; ?>
<?php echo "book {$data->bookcat}<br/>"; ?>
<hr/>  

---fin archivo "_unafila.php"---


Este archivo, '_unafila.php', sera invocado por cada una de las filas de tu recordset, cada vez que se invoca trae consigo y listo para tu uso
una variable llamada "$data", la cual representa tu ROW, tu Recordset, por llamarlo al estilo de la vieja escuela.

Y....respecto a tu pregunta inicial....CListView trae ya su propio pager....y tu no tienes que hacer nada sino mirar como aparece de forma tan elegante.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users