<?php
// ==========================
// = Realiza calculos para paginar resultados =
// ==========================
/*
*/
/*
* sistema que consiste en una paginación partiendo desde la pagina 0
*
* crea un array que consta de los valores para la pagina actual, valores para botones circundantes anteriores a la pagina actual,
* valores para los botones circundantes posteriores a la pagina actual,
* un valor para el boton anterior a la pagina actual y un valor para un boton posterior a la pagina actual.
*
* tambien incluye el metodo currentPages por si el developer quisiera mostrar el conjunto de resultados
* que esta utilizando el usuario.
*
* ejemplo de resultado final con la configuracion por defecto
*
* surround_before before_button page after_button surround_after total_pages current_pages
* 0 1 2 3 4 4 5 6 6 7 8 9 10 10 [a partir del registro] 500
*/
class Paginator
{
/*
* propiedades
*/
//resultados totales
private $totalResultsSet;
//numero de resultados por pagina
private $resultsPage = 10;
//numero de pagina actual
private $page;
//registro actual que esta usando el usuario
private $currentPages;
//numero de paginas totales
private $totalPages;
//numero de paginas anteriores
private $pagesBefore = 5;
//numero de paginas siguientes
private $pagesAfter = 5;
//pagina anterior
private $beforeButton;
//pagina siguiente
private $afterButton;
//botones circundantes anteriores
private $surroundBefore = array();
//botones circundantes posteriores
private $surroundAfter = array();
//resultado de un metodo
private $result = array();
// action URL, para los botones del paginador
private $url;
//identificador, identifica el objeto que esta paginando
private $id;
/*
* para iniciar tanto las propiedades como los calculos basicos para toda la clase
*
* los parametros son
* $totalResultsSet = numero total de resultados a paginar en la BD
* $page = pagina que solicita el usuario
* $url = la url donde se encuentra el usuario; por ejemplo: www.web.com?camisetas (es necesario haber iniciado la url con ?)
* $id = id es el identificador del objeto a paginar; por ejemplo: www.web.com?camisetas&color=rojas&page_camisetas=2
*
* (donde "page_camisetas" es el id y "2" es la pagina para mostrar al usuario)
*/
function __construct($totalResultsSet, $page, $url, $id)
{
$this->totalResultsSet = $totalResultsSet;
$this->page = $page;
$this->totalPages = $this->calcTotalPages($totalResultsSet, $this->resultsPage);
$this->currentPage = $this->currentPages($page, $this->resultsPage);
$this->url = $url;
$this->id = $id;
}
/*
* calcula las paginas totales/page
*/
public function calcTotalPages($totalResultsSet, $resultsPage)
{
//divide los resultados totales entre los resultados a mostrar por pagina
return $this->totalPages = ceil($totalResultsSet / $resultsPage); }
/*
* calcula el conjunto de registros que esta empleando el usuario/currentPages
*/
public function currentPages($page, $resultsPage)
{
//multiplica la pagina actual por los resultados por pagina
return $this->currentPages = ceil($page * $resultsPage); }
/*
* calcula las paginas circundantes anteriores/surround_before
*/
public function surroundPagesBefore()
{
//resta la pagina menos el numero de paginas anteriores en el centro
$pagesBefore = $this->page - $this->pagesBefore;
//comienza a crear botones hasta llegar a la pagina actual
for($i=$pagesBefore, $j=1; $i < $this->page AND $j<=$this->pagesBefore; $i++ AND $j++)
{
if($i>=0)
{
'page' =>$i,
'url' =>$this->createURL($this->url, $this->id, $i)
));
}
}
//sino retorna false para que no muestre el boton anterior
if(empty($this->surroundBefore)) {
$this->surroundBefore = FALSE;
}
?>