Paginación de resultados en Cake1.2
Muchas veces cuando trabajamos con un conjunto de datos muy grande, es recomendable y positivo mostrarle al usuario un listado más pequeño de datos y el resto repartirlos en páginas adicionales. Esta técnica se llama paginación de resultados. Hacer esto en CakePHP1.2 es, cómo casi todo en este framework, muy fácil. El siguiente ejemplo será basado [...]
Muchas veces cuando trabajamos con un conjunto de datos muy grande, es recomendable y positivo mostrarle al usuario un listado más pequeño de datos y el resto repartirlos en páginas adicionales. Esta técnica se llama paginación de resultados.
Hacer esto en CakePHP1.2 es, cómo casi todo en este framework, muy fácil. El siguiente ejemplo será basado en el mismo modelo presentado para el artículo sobre validación en CakePHP 1.2.
Empecemos por llenar la base de datos con información con la cual hacer pruebas:
[sql]
INSERT INTO users VALUES
(NULL, ‘alias1′, ‘correo1′, ‘nombre1′, ’s1′, ‘pass1′),
(NULL, ‘alias2′, ‘correo2′, ‘nombre2′, ’s2′, ‘pass2′),
(NULL, ‘alias3′, ‘correo3′, ‘nombre3′, ’s3′, ‘pass3′),
(NULL, ‘alias4′, ‘correo4′, ‘nombre4′, ’s4′, ‘pass4′),
(NULL, ‘alias5′, ‘correo5′, ‘nombre5′, ’s5′, ‘pass5′),
(NULL, ‘alias6′, ‘correo6′, ‘nombre6′, ’s6′, ‘pass6′),
(NULL, ‘alias7′, ‘correo7′, ‘nombre7′, ’s7′, ‘pass7′),
(NULL, ‘alias8′, ‘correo8′, ‘nombre8′, ’s8′, ‘pass8′),
(NULL, ‘alias9′, ‘correo9′, ‘nombre9′, ’s9′, ‘pass9′),
(NULL, ‘alias10′, ‘correo10′, ‘nombre10′, ’s10′, ‘pass10′),
(NULL, ‘alias11′, ‘correo11′, ‘nombre11′, ’s11′, ‘pass11′),
(NULL, ‘alias12′, ‘correo12′, ‘nombre12′, ’s12′, ‘pass12′),
(NULL, ‘alias13′, ‘correo13′, ‘nombre13′, ’s13′, ‘pass13′),
(NULL, ‘alias14′, ‘correo14′, ‘nombre14′, ’s14′, ‘pass14′),
(NULL, ‘alias15′, ‘correo15′, ‘nombre15′, ’s15′, ‘pass15′),
(NULL, ‘alias16′, ‘correo16′, ‘nombre16′, ’s16′, ‘pass16′),
(NULL, ‘alias17′, ‘correo17′, ‘nombre17′, ’s17′, ‘pass17′),
(NULL, ‘alias18′, ‘correo18′, ‘nombre18′, ’s18′, ‘pass18′),
(NULL, ‘alias19′, ‘correo19′, ‘nombre19′, ’s19′, ‘pass19′),
(NULL, ‘alias20′, ‘correo20′, ‘nombre20′, ’s20′, ‘pass20′);
[/sql]
Ya tenemos 20 usuarios en la tabla (users) para mostrar. El modelo usado sigue siendo igual que el presentado en el artículo anterior. Para mosatrar el listado de usuarios usamos la función index como sigue:
[php]
function index() {
$this->set(’users’, $this->paginate());
}
[/php]
Así de sencillo, sin embargo es necesario mostrar la información en la vista:
[php]
List Users
| < ?php echo $paginator->sort(’id’);?> | < ?php echo $paginator->sort(’alias’);?> | < ?php echo $paginator->sort(’email’);?> | < ?php echo $paginator->sort(’name’);?> | < ?php echo $paginator->sort(’salt’);?> | < ?php echo $paginator->sort(’password’);?> | Actions |
|---|---|---|---|---|---|---|
| < ?php echo $user['User']['id']; ?> | < ?php echo $user['User']['alias']; ?> | < ?php echo $user['User']['email']; ?> | < ?php echo $user['User']['name']; ?> | < ?php echo $user['User']['salt']; ?> | < ?php echo $user['User']['password']; ?> | < ?php echo $html->link(’View’, array(’action’=>’view’, $user['User']['id'])); ?> < ?php echo $html->link(’Edit’, array(’action’=>’edit’, $user['User']['id'])); ?> < ?php echo $html->link(’Delete’, array(’action’=>’delete’, $user['User']['id']), null, ‘Are you sure you want to delete #’ . $user['User']['id']); ?> |
|
< ?php echo $paginator->next(’next >>’, array(), null, array(’class’=>’disabled’));?>
- < ?php echo $html->link(’New User’, array(’action’=>’add’)); ?>
[/php]
Para mostrar los resultados paginados se usa el helper paginator, en las líneas:
[php]
< ?php echo $paginator->sort(’id’);?> < ?php echo $paginator->sort(’alias’);?> < ?php echo $paginator->sort(’email’);?> < ?php echo $paginator->sort(’name’);?> < ?php echo $paginator->sort(’salt’);?> < ?php echo $paginator->sort(’password’);?> Actions
[/php]
Se muestran las cabeceras de la tabla con enlaces que permiten ordenar los resultados.
Por otro lado, la paginación se hace con las líneas:
[php]
< ?php echo $paginator->prev(’< < previous’, array(), null, array(’class’=>’disabled’));?>
|
< ?php echo $paginator->next(’next >>’, array(), null, array(’class’=>’disabled’));?>
[/php]
El comportamiento por defecto del paginador muestra 20 resultados por página. Si quisieramos disminuir el número de resultados por página es necesario cambiar una variable $paginate en el controlador. Por ejemplo, para mostrar 5 resultados por página:
[php]
class UsersController extends AppController {
…
var $paginate = array(’limit’ => 5);
…
}
[/php]
La función paginate usada en controlador permite pasarle varios parámetros los cuales aún no han sido documentados. El primero permite parsarle un objeto (un arreglo - posiblemente el resultado de un query sql, un string - el modelo a usar), el segundo parámetro permite pasar las condiciones que deben cumplir los resultados (como el arreglo conditions en la función findAll), el último parámetro parece ser el que permite definir las condiciones de la búsqueda.
Resumen
El nuevo método de paginación que trae cake1.2 por defecto permite repartir los resultados de una búsqueda en varias páginas de manera muy fácil. Este ha sido un ejemplo básico de cómo hacerlo.
Recibe otros artículos como este automáticamente
Suscríbete vía RSS a aikon.com.ve ||
¿Qué es RSS?