Inicio > Php5 > Paginación con clases en PHP y MySQL

Paginación con clases en PHP y MySQL

martes, 3 de junio de 2008

paginacionCuando la información que queremos presentar en pantalla es abundante, es que se recurre a la paginación, esta divide en letras y estas letras a su vez se dividen en páginas, haremos algo simple y utilizaremos clases en PHP.

Les recuerdo para las personas nuevas en PHP que clases sólo funcionan desde la versión 5, he utilizado las mismas tablas del ejercicio de listas desplegables llenadas dinámicamente.

Empecemos creando una tabla (etiqueta table en html) que contendrá la información, el script principal es:

paginación.php

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Paginación</title>
</head>
<body>
<table border="1" width="50%"><tr>
<th width="20%">Código</th>
<th>Provincia</th>
<th>Departamento</th>
</tr>
</table>
</body>
</html>

Luego incluiremos el script de la clase paginación en el comienzo, seguidamente instanciaremos la clase paginación en una variable que es la que nos permitirá acceder a los próximos métodos.

< ?php
include("paginacion.clase.php");
$clPag = new paginacion();
?>
<html xmlns="http://www.w3.org/1999/xhtml">

El script de la clase paginación, comienza definiendo los atributos que se usarán, además contiene el constructor de la clase que hace conexión a la base de datos para poder obtener los datos.

paginacion.clase.php

< ?php

class paginacion {

var $cn;                // almacenará la conexión actual
private $sql;         // cadena sql de consulta
var $rs;                // resultado de la consulta
var $regxpag = 10;    // registros por página
private $pagina;    // página actual
private $letra;    // letra actual
private $totxlet;    // total de provincias por letra
private $pagxlet;    // total de páginas por letra

function __construct() {
$this->cn = mysql_connect("localhost","usuario","clave");
if (!$this->cn)
exit("Error de Acceso "+mysql_error());

if (!mysql_select_db("bd_anidados"))
exit("Error de BD "+mysql_error());

}
}
?>

Inmediatamente crearemos el método indice de la clase, esto hace referencias a la primera letra de las provincias donde haciendo click en cada letra iremos directamente a todos las provincias que empiezan con esa letra.

function indice($let) {
$this->sql="SELECT DISTINCT LEFT(despro,1) letra FROM provincia ORDER BY despro";
$this->rs=mysql_query($this->sql);
$numfil=mysql_num_rows($this->rs);
echo "Indice : ";
for ($i=0; $i< $numfil; $i++) {
$letra=mysql_result($this->rs,$i);
echo "<a href='paginacion.php?let=$letra'>$letra</a>";
if ($i+1!=$numfil) echo " | ";
}
if ($let!="")
$this->letra=$let;
else
$this->letra=mysql_result($this->rs,0);
}
}
?>

En paginacion.php, accedemos al método de la clase, acá es donde recién se ejecutará.

<body>
< ?php
$clPag->indice($let);
?>
<table border="1" width="50%">

Creamos el siguiente método donde veremos los datos, lo llamaremos pagina, en ella tenemos en cuenta que página se muestra, se ha considerado sólo para 10 elementos por página

}
function pagina($pag) {
$this->pagina=$this->regxpag*$pag;
$this->sql="SELECT codpro,despro,desdep FROM provincia p ";
$this->sql.="INNER JOIN departamento d ON p.coddep=d.coddep ";
$this->sql.="WHERE despro LIKE '".$this->letra."%' ";
$this->sql.="ORDER BY despro LIMIT $this->pagina,$this->regxpag";
$this->rs=mysql_query($this->sql);
while ($reg=mysql_fetch_assoc($this->rs)) {
echo "<tr>";
printf("<td align='center'>%04d</td>",$reg['codpro']);
echo "<td>".$reg['despro']."</td>";
echo "<td>".$reg['desdep']."</td>";
echo "</tr>";
}
}
}
?>

Accedemos al método desde paginacion.php.


< ?php
$clPag->pagina($pag);
?>
</table>

Y finalmente crearemos el método pie de la clase paginación donde veremos los número de las páginas cuando pasen de los 10 elementos a visualizar.

}
function pie($pag) {
$this->sql="SELECT codpro,despro,desdep FROM provincia p ";
$this->sql.="INNER JOIN departamento d ON p.coddep=d.coddep ";
$this->sql.="WHERE despro LIKE '".$this->letra."%' ";
$this->rs=mysql_query($this->sql);
$this->totxlet=mysql_num_rows($this->rs);
$this->pagxlet=ceil($this->totxlet/$this->regxpag);
if ($this->pagxlet > 1) {
echo "<tr><td colspan='3' align='center'>";
for ($i=0;$i< $this->pagxlet;$i++) {
if ($i==$pag)
echo ($i+1);
else
echo "<a href='paginacion.php?pag=$i&amp;amp;amp;amp;let=$this->letra'>".($i+1)."</a>";
if ($i!=($this->pagxlet-1)) echo " | ";
}
echo "</td>";
}
}
}
?>

El acceso al método en paginacion.php.

$clPag->pagina($pag);
$clPag->pie($pag);
?>

Ver demostración

Descargar archivos

Hasta pronto.

Categories: Php5 Tags: , , ,
  1. martes, 15 de julio de 2008 a las 13:37 | #1

    gracias beto por el dato, archivo de descarga actualizado…

  2. beto
    martes, 15 de julio de 2008 a las 09:30 | #2

    esta muy bueno el ejemplo y muy bien explicado,
    solo un detalle al descargar los archivos falta es script de la base de datos…

Comentarios cerrados.