<?php
class Paginador
{
private $_titulos = array('primero' => array('vista' => '| Primero ...', 'title' => 'Ir a la primera Pagina',
'class' => null,
'off' => null),
'bloqueAnterior' => array('vista' => '<<', 'title' => 'Bloque Anterior',
'class' => null,
'off' => null),
'anterior' => array('vista' => '<', 'title' => 'Pagina Anterior',
'class' => null,
'off' => null),
'siguiente' => array('vista' => '>', 'title' => 'Pagina Siguiente',
'class' => null,
'off' => null),
'bloqueSiguiente' => array('vista' => '>>', 'title' => 'Bloque Siguiente',
'class' => null,
'off' => null),
'ultimo' => array('vista' => '... Ultimo |', 'title' => 'Ir a la Ultima Pagina',
'class' => null,
'off' => null),
'numero' => array('vista' => null, 'title' => 'Ir a la pagina ',
'class' => null,
'off' => null),
'actual' => array('vista' => null, 'title' => 'Estas viendo esta pagina',
'class' => null,
'off' => null));
private $_marcador = array('antes' => '|', 'despues' => '|');
private $_paginacion = array();
private $_cantidadDeRegistrosPorPagina = 10;
private $_cantidadDeEnlacesDelPaginador = 10;
private $_cantidadPaginas;
private $_omitir = array();
private $_pagActual;
private $_propagar;
private $_urlDestino = null;
public function __construct($crpp = 10, $cep = 10)
{
$this->_cantidadDeRegistrosPorPagina = ((int)$crpp > 0)? $crpp : 10;
$this->_cantidadDeEnlacesDelPaginador = ((int)$cep > 0)? $cep : 10;
}
public function setCantidadRegistros($cantidad = 10)
{
$this->_cantidadDeRegistrosPorPagina = ((int)$cantidad > 0)? $cantidad : 10;
}
public function setCantidadEnlaces($cantidad = 10)
{
$this->_cantidadDeEnlacesDelPaginador = ((int)$cantidad > 0)? $cantidad : 10;
}
public function setPropagar
(Array $variables) {
$getUrl = '&';
foreach ($variables as $valor) {
$valorUrl= isset($_GET[$valor])?
$_GET[$valor] : null; $getUrl .= urlencode($valor) . '=' . $valorUrl . '&'; }
$this->_propagar = $getUrl;
}
public function paginar($pagina,$cantidadDeResultados)
{
$pagina = ((int)$pagina < 0)? 0 : $pagina;
$this->_pagActual = $pagina;
if ($cantidadDeResultados < 1) {
return false;
}
$paginaInicial = $paginaFinal = 0;
$totalPaginas = ceil($cantidadDeResultados / $this->_cantidadDeRegistrosPorPagina
);
if ($totalPaginas < 2) {
$this->_cantidadPaginas = 1;
return false;
}
if ($totalPaginas <= $this->_cantidadDeEnlacesDelPaginador) {
$paginaInicial = 1;
$paginaFinal = $totalPaginas;
} else {
$centroPaginador = floor($this->_cantidadDeEnlacesDelPaginador
/ 2); $paginaInicial = ($pagina+1) - $centroPaginador;
$paginaFinal = $paginaInicial + $this->_cantidadDeEnlacesDelPaginador - 1;
if ($paginaFinal > $totalPaginas) {
$paginaFinal = $totalPaginas;
$paginaInicial = $paginaFinal - ($this->_cantidadDeEnlacesDelPaginador -1);
}
if ($paginaInicial < 1) {
$paginaInicial = 1;
$paginaFinal = $this->_cantidadDeEnlacesDelPaginador;
}
}
$ajuste = floor($this->_cantidadDeEnlacesDelPaginador
/ 2); $ajuste2 = 1 - ($this->_cantidadDeEnlacesDelPaginador % 2);
$blockInicio = $paginaInicial - $this->_cantidadDeEnlacesDelPaginador + $ajuste - 1;
$blockFinal = $paginaFinal + $this->_cantidadDeEnlacesDelPaginador - $ajuste + $ajuste2;
$paginaInicial = $paginaInicial - 1;
$paginaFinal = $paginaFinal - 1;
$this->_primera($paginaInicial);
$this->_bloqueAnterior($blockInicio, $ajuste);
$this->_anterior($pagina);
$this->_paginacion($pagina, $paginaInicial, $paginaFinal);
$this->_siguiente($pagina, $totalPaginas);
$this->_bloqueSiguiente($paginaFinal, $totalPaginas, $blockFinal);
$this->_ultima($paginaFinal, $totalPaginas);
$this->_cantidadPaginas = $totalPaginas;
return $this->_paginacion;
}
public function setTitulosVista($titulo, $valor)
{
}
}
public function setTitulosTitle($titulo, $valor)
{
}
}
public function setClass($titulo, $clase = null, $claseOff = null)
{
$this->_titulos[$titulo]['class'] = $clase;
$this->_titulos[$titulo]['off'] = $claseOff;
}
}
public function setMarcador($antes, $despues)
{
}
public function setOmitir
($omitir = array()) {
$this->_omitir = $omitir;
}
}
public function setUrlDestino($url = null)
{
$this->_urlDestino
= empty ($url)?
$_SERVER['PHP_SELF'] : $url; }
public function getPaginacion()
{
return $this->_paginacion;
}
public function getHtmlPaginacion($varGet = 'pagina', $cont = 'li')
{
foreach ($this->_paginacion as $enlace) {
$htmlPag = '';
if ($enlace['class']) {
$htmlPag .= '<' . $cont;
if ($enlace['class'] != '<>' ) {
$htmlPag .= ' class="' . $enlace['class'] . '" ';
}
$htmlPag .= '>';
}
if ($enlace['numero'] != $this->_pagActual
&& empty ($enlace['off'])) { $htmlPag .= '<a href="' . $this->_urlDestino . '?' . $varGet . '='
. $enlace['numero']
. $this->_propagar . '" '
. 'title="' . $enlace['title'] . '" '
. '>' . $enlace['vista'] . '</a>';
} else {
$htmlPag .= $enlace['vista'] ;
}
if ($enlace['class']) {
$htmlPag .= '</' . $cont . '>';
}
$paginador[]= $htmlPag;
}
return $paginador;
}
public function getCantidadPaginas()
{
return $this->_cantidadPaginas;
}
private function _primera($paginaInicial)
{
if ($paginaInicial != 0 && !in_array('primero', $this->_omitir
)) { $this->_paginacion
[] = array('numero' => 0,