Bueno Manuel, estas de buenas hoy, ya que estoy de animo para explicar
esto:
Lo que hace el paginate es mostrar n de m datos que hay en el
servidor, permitiendole al usuario navegar entre las distintas paginas
que puedan existir.
Antes de empezar, vamos a colocar unas condiciones, primero el
paginate lo vamos a hacer con Ajax (para que se vea mas vacano, ya que
tambien se puede hacer recargando la pagina), vamos a utilizar una
vista principal y dentro de esta una vista para el paginate (la cual
va a ser parcial), y por pereza solo voy a dejar un link de siguiente.
Primero creamos la vista principal:
codigo de prueba/principal.phtml :
<h1>Paginando Datos</h1>
<div id="resultado">
<?php View::getContent(); ?>
</div>
<div>Paginador proporcionado por Kumbia</div>
Esta vista nos va a servir como marco para el paginador. Se puede ver
que todo lo que genera el Kumbia en sus niveles mas bajos, va a verse
en el div#resultado (Cuando me refiero a niveles mas bajos, me refiero
a lo generado en el controlador, y vistas parciales).
Ahora se crea la vista del paginador, la cual llevara el codigo que se
debe mostrar cada vez que se valla a una pagina especificada.
codigo de prueba/_paginador.phtml :
<table>
<tr>
<td>Código</td>
<td>Detalle</td>
</tr>
<?php
foreach($paginate->items as $table){
echo "<tr>";
echo "<td>{$table->getCodigo()}</td>";
echo "<td>{$table->getDetalle()}</td>";
echo "</tr>";
}
?>
<tr>
<td colspan="2">
<?php
echo Tag::linkToRemote("text: Siguiente","update:
resultado","action: lugares/paginador/{$paginate->next}");
?>
</td>
</tr>
</table>
Como se puede ver, se ha creado una vista parcial, ya que la vamos a
utilizar varias veces. Otra caracteristica visible es que se usa una
variable paginate (la cual veremos como se carga mas adelante) que
contiene dentro de si una serie de propiedades para ayudarnos a
paginar, estas son:
* item: obtiene los datos que se muestran en la vista actual.
* next: indica el numero de la pagina siguiente. (El cual es el
que se utiliza en el ejemplo)
* before: indica el numero de la pagina anterior.
* last: indica el numero de la ultima pagina.
* first: indica el numero de la primera pagina (siempre 1)
* current: indica el numero de pagina actual
* total_pages: indica el numero total de paginas que hay.
Ademas se usa un Tag::linkToRemote, para hacer una peticion ajax y
solo cargar el paginador
(parametros(text: texto a mostrar, update: elemento HTML a actualizar,
action: accion del controlador para obtener los datos)).
Ahora solo falta el controlador, el cual llevara dos funciones:
codigo de prueba_controller.phtml:
public function principalAction(){
$this->setParamToView("paginate",Tag::paginate($this->Tabla->find
(),1,2));
$this->renderPartial('paginador');
}
public function paginasAction($pagina){
$this->setResponse('ajax');
$this->setParamToView("paginate",Tag::paginate($this->Tabla->find
(),$pagina,2));
$this->renderPartial('paginador');
}
Como se puede ver, el controlador, le falta codigo (declarar la
clase), pero el paginate, funciona con estas dos acciones.
principalAction(): carga por primera vez la vista principal con los
datos enviados con setParamToView (o sea paginate) los cuales son una
variable tipo paginate.
Para crear dicha variable se usa la funcion Tag::paginate() la cual
recibe tres parametros:
1) Que desea paginar.
2) Que pagina quiere ver
3) De a cuantas paginas quiere ver.
Por ultimo la funcion renderPartial() lo que hace es pintar la vista
parcial en la cual vamos a mostrar los datos de paginate.
paginasAction($pagina): esta funcion nos permite ver cada una de las
paginas que escogemos, la respuesta de esta funcion es mediante ajax,
por eso el setResponse('ajax').
Y el resto del codigo es semejante al anterior, solo que aqui la
pagina que queremos ver, llega como parametro, y debe ser una pagina
valida, no mayor a total_pages ni menor a 1.
Como se puede ver, el paginate no es tan complicado, ademas se podria
hacer todo en una funcion, condicionado si se esta paginando o hasta
ahora se esta llegando, espereo te alla quedado claro Manuel,
cualquier cosa nos comentas como te fue, las dudas que hallan podido
surgir, o si encuentras sugerencias para mejorar el codigo.