El Guru Programador
Web hosting
Usuario DESCONOCIDO | Registrate Gratis | Usuarios Registrados

Paginación en PHP

Autor Mauro Rondinelli
 

Este articulo explica uno de los metodos mas faciles y eficientes para paginar resultados en PHP.

Como primer tenemos nuestra base de datos, en nuestro caso la nombramos "noticias" y le añadimos una tabla llamada "articulos" con la siguiente estructura...

CREATE TABLE `articulos` (
   `id` INT NOT NULL AUTO_INCREMENT ,
   `titulo` VARCHAR( 255 ) NOT NULL ,
   `descripcion` TEXT NOT NULL ,
   `contenido` TEXT NOT NULL ,
   `fecha` DATE NOT NULL ,
   `visible` TINYINT( 1 ) NOT NULL ,
PRIMARY KEY ( `id` )
);

Nosotros hemos cargado la tabla con los titulares de un diario, la paginación final tiene este aspecto..

Pasemos a explicar el código, primero hemos creado la función de conexión a la base de datos...

function conectar()
{
   $base_de_datos = "noticias";
   $db_usuario = "root";
   $db_password = "";

if (!($link = mysql_connect("localhost", $db_usuario, $db_password)))
{
   echo "Error conectando a la base de datos.";
   exit();
}
if (!mysql_select_db($base_de_datos, $link))
{
   echo "Error seleccionando la base de datos.";
   exit();
}
   return $link;
}

No olviden modificar las variables $base_de_datos, $db_usuario y $db_password con sus correspondientes valores, esa función puede ir en un include (seria lo mas recomendado), luego llamamos a la funcion...

$db = conectar();

Ya tenemos la variable $db apuntada a nuestra base de datos el siguiente paso es definir los valores por defecto, como por ejemplo cada cuantos artículos paginar...

$registros = 3;

Y detectar si la variable $pagina (indica el numero de pagina actual) esta definida, si no es así le damos el valor 1 ósea que si no se paso por la url la variable $pagina (por ejemplo: "paginacion.php?pagina=2") entramos a la pagina 1 directamente...

if (!$pagina) {
   $inicio = 0;
   $pagina = 1;
}
else {
   $inicio = ($pagina - 1) * $registros;
}

Como dato adicional la variable $inicio indica desde que registro empezar a mostrar los resultados. Pasemos al corazón de la paginación, miremos primero el código...

$resultados = mysql_query("SELECT id FROM articulos WHERE visible = 1");
$total_registros = mysql_num_rows($resultados);
$resultados = mysql_query("SELECT * FROM articulos WHERE visible = 1 ORDER BY fecha DESC LIMIT $inicio, $registros");
$total_paginas = ceil($total_registros / $registros);

Como ven realizamos 2 consultas similares en cuanto a su criterio de selección ("WHERE visible = 1"). Con la primer consulta obtenemos el numero de resultados totales...

$resultados = mysql_query("SELECT id FROM articulos WHERE visible = 1");
$total_registros = mysql_num_rows($resultados);

Ese dato de $total_registros nos sirve para poder determinar la cantidad de paginas. La segunda consulta tiene en el SQL dos elementos a analizar, el primero es el ORDER BY que lo que hace es ordenar los resultados por fecha y de forma descendente ("DESC") en caso contrario usaríamos "ASC".

El segundo elemento a ver es LIMIT $inicio, $registros esa cláusula SQL cumple la función de limitar los resultados devueltos, el primer valor pasado como parámetro indica desde que registro empezar a devolver los resultados y el segundo parámetro indica la cantidad de registros que debe devolver desde $inicio.

Luego solo queda el bucle que devuelve los resultados...

while($articulo=mysql_fetch_array($resultados)) {

   echo "<b>".$articulo["titulo"]."</b><br>";
   echo "<font color='#666666'>".$articulo["descripcion"]."</font><br><br><br>";

}

Como parte final nos queda lo que seria el navegador de paginas...

El código del navegador de paginas se divide en tres partes, primero la que muestra el link a la pagina anterior

if(($pagina - 1) > 0) {
   echo "<a href='paginacion.php?pagina=".($pagina-1)."'>< Anterior</a> ";
}

El link a la pagina anterior será visible siempre y cuando no estemos en la primer pagina ($pagina - 1) > 0). La segunda parte del navegador de paginas seria la que muestra la cantidad de paginas...

for ($i=1; $i<=$total_paginas; $i++){
   if ($pagina == $i)
      echo "<b>".$pagina."</b> ";
   else
      echo "<a href='paginacion.php?pagina=$i'>$i</a> ";
}

Y la tercer parte es la que muestra el enlace a la pagina siguiente...

if(($pagina + 1)<=$total_paginas) {
   echo " <a href='paginacion.php?pagina=".($pagina+1)."'>Siguiente ></a>";
}

En este caso muestra el enlace siempre y cuando no estemos en la ultima pagina (($pagina + 1)<=$total_paginas).

Podes descargar el ejemplo, lee el archivo leee.txt (ouch!!! maldito branding) que esta dentro del ZIP para poder importar la base de datos y así utilizar el ejemplo. Saludos!

 
Suscribite al boletin y recibi las novedades del sito en tu Email!
Tu Email

 

Contactos myStudio Network



Your Ad Here