Ok enpecemos, esta es la clase
Código PHP:
Ver original<?php
class Paginador
{
private $_titulos = array('primero' => array('vista' => 'Primero', 'title' => 'Ir a la primera Pagina'),
'bloqueAnterior' => array('vista' => '<<', 'title' => 'Bloque Anterior'),
'anterior' => array('vista' => '<', 'title' => 'Pagina Anterior'),
'siguiente' => array('vista' => '>', 'title' => 'Pagina Siguiente'),
'bloqueSiguiente' => array('vista' => '>>', 'title' => 'Bloque Siguiente'),
'ultimo' => array('vista' => 'Ultimo', 'title' => 'Ir a la Ultima Pagina'),
'numero' => array('vista' => null, 'title' => 'Ir a la pagina '),
'actual' => array('vista' => null, 'title' => 'Estas viendo esta pagina')
);
private $_marcador = array('antes' => '<span class="bg_num_pag">', 'despues' => '</span>');
private $_paginacion = array();
private $_cantidadDeRegistrosPorPagina = 10;
private $_cantidadDeEnlacesDelPaginador = 10;
private $_cantidadPaginas;
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 paginar($pagina,$cantidadDeResultados)
{
$pagina = ((int)$pagina < 0)? 0 : $pagina;
if ($cantidadDeResultados < 1) { // No hay resultados que paginar
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;
if ($totalPaginas > 1) {
if ($paginaInicial != 0) {
$paginacion[] = array('numero' => 0, 'vista' => $this->_titulos['primero']['vista'],
'title' => $this->_titulos['primero']['title']);
}
}
if ($blockInicio > $ajuste) {
$paginacion[] = array('numero' => $blockInicio, 'vista' => $this->_titulos['bloqueAnterior']['vista'],
'title' => $this->_titulos['bloqueAnterior']['title']);
}
if($pagina > 0) {
$paginacion[] = array('numero' => $pagina-1, 'vista' => $this->_titulos['anterior']['vista'],
'title' => $this->_titulos['anterior']['title']);
}
for ( $f = $paginaInicial; $f <= $paginaFinal; $f++) {
if ($f != $pagina) {
$paginacion[]= array('numero' => $f, 'vista' => $f+1,
'title' => $this->_titulos['numero']['title'] . ($f+1));
} else {
$paginacion[]= array('numero' => $f, 'vista' => $this->_marcador['antes']
. ($f+1) . $this->_marcador['despues'],
'title' => $this->_titulos['actual']['title']);
}
}
if ($pagina < ($totalPaginas-1)) {
$paginacion[] = array('numero' => $pagina+1, 'vista' => $this->_titulos['siguiente']['vista'],
'title' => $this->_titulos['siguiente']['title']);
}
if ($paginaFinal < ($totalPaginas - $this->_cantidadDeEnlacesDelPaginador - 1)) {
$paginacion[] = array('numero' => $blockFinal-1, 'vista' => $this->_titulos['bloqueSiguiente']['vista'],
'title' => $this->_titulos['bloqueSiguiente']['title']);
}
if ( $paginaFinal != ($totalPaginas - 1)) {
$paginacion[] = array('numero' => $totalPaginas-1, 'vista' => $this->_titulos['ultimo']['vista'],
'title' => $this->_titulos['ultimo']['title']);
}
$this->_paginacion = $paginacion;
$this->_cantidadPaginas = $totalPaginas;
return $paginacion;
}
public function setTitulosVista($titulo, $valor)
{
$this->_titulos[$titulo]['vista'] = $valor;
}
}
public function setTitulosTitle($titulo, $valor)
{
$this->_titulos[$titulo]['title'] = $valor;
}
}
public function setMarcador($antes, $despues)
{
$this->_marcador['antes'] = $antes;
$this->_marcador['despues'] = $despues;
}
public function getPaginacion()
{
return $this->_paginacion;
}
public function getCantidadPaginas()
{
return $this->_cantidadPaginas;
}
}
Ahora este es el codigo para implementarlo
Código PHP:
Ver original<?php
include'paginador.php';
$cantRegistros = $filas;
$pgnActual = isset($_GET['pgn'])?
$_GET['pgn'] : 0;
$pag = new Paginador();
$datos = $pag->paginar($pgnActual, $cantRegistros);
$inicio = $pgnActual * 10;
$consulta = mysql_query("SELECT * FROM tb_productos LIMIT $inicio, 30"); ?>
//Codigo pagina HTML
//Muetras registros en tablas o como quieras
//Mostramos los numero que haran la paginacion 1 2 3 etc
Código PHP:
Ver original<?php
if ($datos) :
echo 'Pagina: ' . ($_GET['pgn'] + 1) . ' de ' . $pag->getCantidadPaginas();
foreach ($datos as $enlace) :
?>
<a href="?pgn=<?php echo $enlace['numero']; ?>" title="<?php echo $enlace['title']; ?>"><?php echo $enlace['vista']; ?></a>
<?php endforeach;?>
<?php endif;?>
Intenta implementarlo y seguimos
Nota: He quitado los cometarios de la clase para poder postear todo el contenido en el foro