Ejemplo de un paginador en PHP y MySQL
Lunes, 18 de agosto de 2008
paginador.php es una clase paginador que permite mostrar los registros devueltos de una consulta a una base de datos de MySQL paginados (al estilo de Google). La clase incluye un ejemplo de uso.
< ?php
/***********************************************************************************************
paginador.php
Ver 1.0
Clase Paginador. Permite mostrar los registros devueltos de una consulta a una base de datos de
MySQL paginados.
(c) Febrero 2003 Carlos Fco. Andión López;(candion@gmail.com)
Este código se ha probado y funciona correctamente en los siguientes entornos:
Microsoft Windows 2000 Server: Php 4.2.3
Apache 2.0.43
MySql 3.23.53-max-nt
Debian GNU/Linux Woody 3.0 : Php 4.1.2
Apache 1.3.26
MySQL 3.23.49
paginador.php is free software; you can redistribute it and/or modify it under the terms of
the GNU General Public License as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
paginador.php is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
Ejemplo de uso
fichero testpaginador.php
<html>
<body>
< ?php
include "paginador.php";
//conexión a la base de datos
$host="localhost";
$user="root";
$password="password";
$dbname="database";
$link = mysql_connect($host, $user,$password);
$sql = "SELECT campo FROM tabla";
mysql_select_db($dbname, $link);
//Si la pagina a mostrar no existe se crea y toma por defecto el valor 1
if (!isset($pagina)) $pagina = 1;
$pagina_php="testpaginador.php"; //Se llama al constructor del objeto paginador
$registros_devueltos=10;
$max_paginas_devueltas=50;
$paginador=new paginador(&$sql,$link,$registros_devueltos,$pagina,$max_paginas_devueltas,$pagina_php);
$resultado = mysql_query($sql, $link); //Se ejecuta la consulta a la base d edatos
$paginador->links(); //Crea los link del objeto paginador
echo "
";
// Se muestra el numero de registros
echo "Registros " . $paginador->registro_minimo() . " a " . $paginador->registro_maximo();
echo " de " . $paginador->total_registros();
echo "
";
//Se muestra el numero de pagina/as
echo "Pagina " . $paginador->pagina_actual() . " de " . $paginador->contador_paginas();
//Se crea la tabla con el resultado de la consulta
echo "
";
echo "
<table border = '1'> n";
echo "
<tr>
<td>campo</td>
</tr>
n";
while ($row = mysql_fetch_array($resultado))
{
echo "
<tr>";
echo "
<td>".$row["campo"]."</td>
";
echo "</tr>
n";
}
echo "</table>
n";
?>
</body>
***********************************************************************************************/
class paginador
{
var $pagina; // Nº de pagina
var $paginas; // Nº total de paginas
var $registros; // Nº de registros a mostrar por pagina
var $total; // Nº total de registros de la BD
var $max_paginas; // Nº Máximo de páginas a mostrar al mismo tiempo
var $aref; // Enlace a pagina que se tiene que mostrar en los links
/* Constructor del objeto. Al llamarlo se le pasan como parámetros la consulta SQL a ejecutar,
la conexión a la BD, el número de registros que se quiere recuperar, el número de página a
la que sequiere ir, el máximo de páginas a mostrar al mismo tiempo (entre 1 y 30) y el
enlace al archivo al que hay que pasarle el númer ode página (el enlace es el nombre del
archivo). El constructor modifica la consulta SQL y le añade el número de registros a
recuperar y el número de página a la que ir. */
function paginador(&$sql,$conexion,$registros,$pagina,$max_paginas,$enlace)
{
$this->total = mysql_num_rows(mysql_query($sql,$conexion));
$this->registros = $registros;
$this->paginas = ceil($this->total / $registros);
$this->pagina=$pagina;
if (is_string($this->pagina)) $this->pagina =1 ;
if (!is_int($this->pagina)) $this->pagina = ceil($this->pagina);
if ($this->pagina &lt;1) $this->pagina =1;
if ($this->pagina > $this->paginas) $this->pagina = $this->paginas;
$this->max_paginas=$max_paginas;
$this->ahref = ($enlace ."?pagina=");
// Solo se pueden mostrar entre 1 y 30 paginas al mismo tiempo. Si se necesita mostrar
// mas de 30 páginas al mismo tiempo poner aqui el valor correspondiente.
if($max_paginas&lt;1)$this->max_paginas=1;
if($max_paginas > 30)$this->max_paginas = 30;
$sql=$sql ." LIMIT " .$this->registros* ($this->pagina-1) .", " .$this->registros;
return(true);
}
// Muestra el total de registros de la consulta a la base de datos
function total_registros()
{
return($this->total);
}
// Muestra el numero de registro mínimo del intervalo entre el que nos encontramos
function registro_minimo()
{
return(((($this->pagina-1) * ($this->registros))+1));
}
// Muestra el numero de registro máximo del intervalo entre el que nos encontramos
function registro_maximo()
{
if (($this->pagina*$this->registros)< =($this->total))
return($this->pagina*$this->registros);
else return $this->total;
}
// Muestra el total de páginas que hay
function contador_paginas()
{
return($this->paginas);
}
// Muestra el Nº de pagina en la que nos encontramos
function pagina_actual()
{
return($this->pagina);
}
/* Busca el valor mínimo y máxino del intervalo de páginas en el que nos encontramos y se
encarga de mostrar los enlaces a las distintas paginas, permitiendo ir a la pagina anterior,
siguiente, asi como desplazarnos al intervalo de páginas anterior o posterior. Solamente
mostrará los enlaces si los registros devueltos de la consulta ocupan más de una página. */
function links()
{
$posicion=1; // posición del intervalo correspondiente a la página pedida
$j=0;
// calculamos la posición del intervalo
while($j < $this->pagina)
{
$j=$j + $this->max_paginas;
if ($j < $this->pagina) $posicion++;
}
// asignamos los valores máximo y mínimo del intervalo y la posición
$minimo=($this->max_paginas*($posicion-1))+1;
$maximo=$this->max_paginas*($posicion );
// mostramos los enlaces a las distintas páginas
if($this->paginas>1)
{
// enlace al intervalo anterior
if($minimo>1)
{
echo "<a href=" .$this->ahref .($minimo - $this->max_paginas);
echo ">< <</a>" ."&nbsp&nbsp&nbsp";
}
// enlace a la página anterior
if($this->pagina>1)
{
echo "</a><a href=" .$this->ahref .($this->pagina - 1);
echo ">< </a>" ."&nbsp&nbsp&nbsp";
}
while($minimo < = $maximo and $minimo <= $this->paginas)
{
// muestra el número de página actual
if($minimo==$this->pagina)
echo "<b>" .$this->pagina ."</b>" ."&nbsp&nbsp";
else
{
// enlaces a las paginas anteriores y posteriores a la actual
// dentro del intervalo seleccionado
echo "</a><a href=" .$this->ahref .$minimo .">" .$minimo;
echo "</a>" ."&nbsp&nbsp";
}
$minimo++;
}
echo "&nbsp&nbsp";
// enlace a la página siguiente
if($this->pagina < $this->paginas)
{
echo "<a href=" .$this->ahref .($this->pagina + 1);
echo ">></a>" ."&nbsp&nbsp&nbsp";
}
//enlace al intervalo siguiente
if($posicion < (ceil($this->paginas/$this->max_paginas)))
{
echo "<a href=" .$this->ahref .($maximo + 1) .">>></a>";
}
}
return(true);
}
}
?>
Comentarios recientes