propuesta de helper de paginacion (optimizado)

Para que todos lo conozcan y lo puedan ir implementando en sus trabajos, esta es la propuesta de helper de paginacion (optimizada).
function paginate($items, $page_number=1, $show=10)
{
	$n = count($items);
	$start = $show*($page_number-1);
	
	$page = new stdClass();
	$page->items = array_slice($items, $start, $show);
	$page->next = ($start + $show)<$n ? ($page_number+1) : false ;
	$page->before = ($page_number>1) ? ($page_number-1) : false ;
	$page->current = $page_number;
	$page->total_pages = ($n % $show) ? ((int)($n/$show) + 1):($n/$show) ;
	
	return $page;
}

Y esta su manera de uso:

A través del $_REQUEST, se pasa una variable "page" a la vista, que contiene el numero de pagina a mostrar, también se pasa el resultado de una consulta a la base de datos.

En el controlador:
usuario_controller.php
class UsuarioController extends ApplicationController
{
	function lista($page=1)
	{
		$_REQUEST['usuarios'] = $this->Usuario->find();
		$_REQUEST['page'] = $page;
	}
}

En la vista:
lista.phtml
<center>Lista de Usuarios</center>

<? $page = paginate($_REQUEST['usuarios'],$_REQUEST['page']) ?>
<table align="center" border="1">
<tr>
<th>Nombres</th>
<th>Apellidos</th>
</tr>

<? foreach($page->items as $usuario){ ?>
<tr>
<td><?= $usuario->nombres ?></td>
<td><?= $usuario->apellidos ?></td>
</tr>
<? } ?>
</table>

<table width="100%">
<tr>
<td align="right">
    <? if($page->before) echo link_to("usuario/lista/$page->before", '<< Anterior'); ?> 
</td>
<td align="center">
    <?= $page->current ?>/<?= $page->total_pages ?> 
</td>
<td align="left">
    <? if($page->next) echo link_to("usuario/lista/$page->next", 'Siguiente >>'); ?> 
</td>
</tr>
</table>

Espero sea de utilidad. Saludos.

Comentarios

  • edited 8:14
    Gracias
  • Gracias ya lo tengo listo para la version 0.4.6RC5
  • Saludos emilio.rst esta muy buena esa paginacion tengo unos css por alli bien buenos voy a ver de que manera se puede integrar y te lo paso... Pero me gusto bastante
  • edited 8:14
    Saludos:

    Muy bueno, lo he usado. Me parece excelente.

    Madelyn
Sign In or Register to comment.