Paginación con clases en PHP y MySQL
Cuando 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;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); ?>
Hasta pronto.