Se podría decir que cualquier página web necesita un sistema de paginación de resultados, pues en éste artículo vamos a tratar este tema de principio a fin.

Primero vamos a analizar el archivo PHP que va a mostrar los resultados paginados, este archivo lo llamaremos contenido.php

contenido.php

  • Creamos una función para mostrar el contenido y otra para contar el total de registros a paginar.
  • function mostrar_contenido($min,$max){
    
    	$con = mysqli_connect("localhost","usuario","contraseña","base-de-datos");
    	//comprobamos la conexión
    	if (mysqli_connect_errno()){
    		echo "Error al conectar " . mysqli_connect_error();
    	}
    
    	$result = mysqli_query($con,"SELECT * FROM tabla ORDER BY id DESC LIMIT ".$min.",".$max."");
    
    	while($row = mysqli_fetch_array($result)) {
    
    		echo $row['nombre'] . " " . $row['apellidos'];
    
    	}
    
    	mysqli_close($con);
    
    }
    
    function contar_contenido(){
    
    	$con = mysqli_connect("localhost","usuario","contraseña","base-de-datos");
    	//comprobamos la conexión
    	if (mysqli_connect_errno()){
    		echo "Error al conectar " . mysqli_connect_error();
    	}
    
    	$result = mysqli_query($con,"SELECT * FROM tabla ");
    
    	$total = mysql_num_rows($result);
    
    	mysqli_close($con);
    
    	return $total;
    
    }
    

    Lo adecuado sería crear una clase con éstos métodos y después llamarlos en contenido.php, pero pongo este pequeño código por no poner la clase entera en el artículo.

    El LIMIT de la consulta es el encargado de controlar los resultados que se muestran, lo que hace es decirle a la consulta, muéstrame desde el registro X al Y, esto varía dependiendo de la página en la que se encuentre el usuario. Es decir, si tenemos nuestro límite de registros por página a 5 y estamos en la primera página pues muestra de 0 a 5 registros, si estamos en la segunda página muestra de 5 a 10, así sucesivamente.

  • Establecemos el número máximo de registros a mostrar por página.
  • $maxreg = 12;
    
  • Obtenemos la página con $_GET.
  • $pag = $_GET['pag'];
    
  • Controlamos la variable recogida con $_GET.
  • if(!isset($pag) || empty($pag)){
    
    	$min = 0;
    	$pag = 1;	
    
    }else{
    
    	if($pag == 1){
    
    		$min = 0;
    
    	}else{
    
    		$min = $maxreg * $pag;
    		$min = $min - $maxreg;
    
    	}
    }
    
  • Incluimos la clase que utilizaremos para paginar los resultados.
  • include("class.AutoPagination.php");
    $obj = new AutoPagination(contar_contenido(), $pag);
    
  • Mostramos el contenido
  • mostrar_contenido($min,$maxreg);
  • Mostramos el paginador.
  • echo $obj->_paginateDetails();
    

    Aquí incluimos el archivo class.AutoPagination.php, la cual es una clase escrita por un programador Indio llamado Nitesh Apte que la pone a disposición de cualquiera con licencia GPL en PHP Classes. Para los vagos que no quieran registrarse en PHP Clases pondré un enlace de descarga al final del post para obtener esta clase desde Mediafire.

El archivo contenido.php quedaría así:

function mostrar_contenido($min,$max){
 
      $con = mysqli_connect("localhost","usuario","contraseña","base-de-datos");
      //comprobamos la conexión
      if (mysqli_connect_errno()){
            echo "Error al conectar " . mysqli_connect_error();
      }
 
      $result = mysqli_query($con,"SELECT * FROM tabla ORDER BY id DESC LIMIT ".$min.",".$max."");
 
      while($row = mysqli_fetch_array($result)) {
 
            echo $row['nombre'] . " " . $row['apellidos'];
 
      }
 
      mysqli_close($con);
 
}
 
function contar_contenido(){
 
      $con = mysqli_connect("localhost","usuario","contraseña","base-de-datos");
      //comprobamos la conexión
      if (mysqli_connect_errno()){
            echo "Error al conectar " . mysqli_connect_error();
      }
 
      $result = mysqli_query($con,"SELECT * FROM tabla ");
 
      $total = mysql_num_rows($result);
 
      mysqli_close($con);
 
      return $total;
 
}

$maxreg = 12;

$pag = $_GET['pag'];

if(!isset($pag) || empty($pag)){
 
      $min = 0;
      $pag = 1;  
 
}else{
 
      if($pag == 1){
 
            $min = 0;
 
      }else{
 
            $min = $maxreg * $pag;
            $min = $min - $maxreg;
 
      }
}

include("class.AutoPagination.php");
$obj = new AutoPagination(contar_contenido(), $pag);

mostrar_contenido($min,$maxreg);

echo $obj->_paginateDetails();

class.AutoPagination.php

En la clase tan sólo deberemos configurar el número de registros por página (deberá ser igual que el que pusimos en el archivo contenido.php) y el número de páginas que se muestra en la paginación, es decir, esto será por si nuestro sitio web tiene 200 páginas no se muestren las 200 páginas una detrás de otra, sino que muestre el número de páginas que le pongamos, por ejemplo si ponemos 10 páginas y estamos en la página 15 mostraría lo siguiente:

[Anterior] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [Siguiente]

En la clase habría que cambiar lo siguiente:

define('PAGE_LIMIT', 12); //límite de registros por página
define('PAGE_RANGE', 10); //el número de páginas que muestra en la paginación

Esto es todo amigos, cualquier cosa pregunten.

Descargar class.AutoPagination.php

Sobre Reacción Estudio

Somos un estudio informático formado por jóvenes centrados en el desarrollo web, el diseño gráfico y la fotografía. Puedes solicitar presupuesto para tu proyecto a través de nuestra página web o por teléfono, pero en este blog hablaremos de todo lo que engloba el desarrollo web a día de hoy.


  • http://www.asientoncontable.tk juan

    muy buen artículo, algun día lo usaré!

  • Juan Carlos Hernandez

    Como le paso la variable $_GET['pag']

    • Alberto

      Como cualquier variable $_GET, el valor se pasa por URL.

  • mario garcia

    buenas amigos…
    el archivo cotenido debe estar en un archivo aparte?? como obtengo la cantidad de pagina en el archivo donde muestro los registros

    saludos..

    • Alberto

      La cantidad de páginas a generar lo hace la clase sola.

  • Raul Trejo

    *Saludos, EXCELENTE aporte.

    para que me compile tuve que hacer un par de cambios

    $pag = $_GET['pag']; // POR… $pag = $_GET['page'];

    y en…

    $obj = new AutoPagination(contar_contenido(), $pag); // POR… $obj = new AutoPagination(contar_contenido(), $_GET['page']);

    pero excelente.

  • Rojeda Rob

    Hola, buenísimo aporte.

    Pero tengo un problemilla, pero he colocado todo tal cual como dices y todo funciona menos que no me salen los enlaces con los números, me sale PREV y NEXT sin funcionar.

    Ahora si me voy al navegador y pongo al lado de php de mi pagina esto ?&page=2 si que me va mostrando las siguientes.

    También tengo que comentar que estoy iniciándome en programación con php

    ¿Porque sucede esto y no aparecen los números y next con enlace a las siguientes paginas??

    • Alberto

      Aunque no pongas en la dirección &page=2, debería de funcionar,
      pues si no encuentra ese parámetro obtiene la primera página.

      Comprueba las sentencias SQL a ver si están fallando.

      Un saludo!!

      • Rojeda Rob

        Las sentencias SQL están bien, me muestra todos lo registros tengo en la base de datos. Todo funciona bien, a falta de los numeritos que no aparecen…
        Muchísimas gracias igualmente.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies.     ACEPTAR