¿Tienes que presentar bastantes datos en una página o app web? ¿Quieres implentar una paginación básica con PHP? No te preocupes! Hoy vamos a revisar como realizar esta funcionalidad muchas veces presentada en nuestros proyectos.
Ya hemos hablado en anteriores post como crear un filtro de productos con php y mysql, el día de hoy vamos a ver algo que complementa perfectamente este post.. veremos como realizar una paginación básica con PHP de tal modo que nuestro proyecto sea capaz de paginar una gran cantidad de resultados en varias páginas (como su nombre lo indica).
Esto lo haremos con un sencillo boton de anterior y siguiente página, posteriormente hablaremos de como hacer esto un poco más avanzado con botones con numero de página 1, 2, 3, 4, .. 7, 8, 9, 10.
Este tema lo he dividido en dos partes para que nos sea más sencillo comprender el funcionamiento de la paginación.

¿Necesitas hosting wordpress? WebEmpresa te ofrece un servicio super rápido, excelente soporte en español y certificado SSL gratuito:
WebEmpresaVamos ya al tutorial de hoy!
¿Qué es la paginación?
La paginación no es más que otra cosa que un pequeño sistema o parte de una página que nos permite controlar que resultados deseamos ver de un conjunto mucho más grande resultados.
Con la paginación podemos controlar que página de resultados deseamos por ejemplo página 1 página 2 o página 3 asi como tambien podemos controlar si queremos ver la siguiente página o la página anterior, este último es el caso que vamos a tratar el día de hoy.
Por ejemplo el propio Google tiene un sistema de paginación en su página de búsqueda.
De esta forma un usuario evita obtener los miles de resultados de una búsqueda para ir viendo de 10 en 10 por páginas, mucho más fácil, rapido y simple.
En este ejemplo el día de hoy únicamente vamos a ver como realizar la opción de siguiente página de resultados y página anterior de resultados, esto para entender perfectamente el funcionamiento de la paginación básica con PHP.
Entonces, ¿Cómo hacerlo?
La magía de la instrucción de MYSQL Limit
Para desarrollar nuestra paginación básica con PHP necesitamos un poco de teoría de como lo vamos a hacer.
En mysql existe una instrucción que tal vez ya conozcas llamada Limit.
Limit nos permite limitar los resultados que arroja una consulta a x cantidad de resultados, puedes ver más de limit PHP Limit Data Selections.
Hasta aquí probablemente no veas nada del otro mundo pero existe otro termino que acompaña a limit que probablemente no sabías: offset.
De esta forma con limit podemos indicar cuandos registros queremos obtener y con offset podemos indicar desde que posición comenzará a contarlos.
Por ejemplo una consulta del tipo:
SELECT * FROM empresas LIMIT 10 OFFSET 11;
Indica que queremos los 10 resultados posteriores al registro 10 (11 incluyendolo a el mismo), es decir del 11 al 20.
Esto sería por ejemplo una página 2 de resultados en una configuración donde se muestran de 10 en 10 por página, por ejemplo el mismo Google.
Genial no? Con esto ya tenemos bastante para comenzar a imaginar como hacerlo!
Vamos a la práctica! Comencemos nuestra paginación básica con PHP!
Estructura HTML
Realmente esta parte es para ubicarnos en un punto de partida en nuesrto ejemplo.
En mi caso estoy desarrollando un directorio en linea donde tengo que mostrar una página de resultados cualquiera.
<div class="col-md-6"> <?php obtenerResultPage($link,$term,$where); ?> </div>
En mi HTML estamos donde se debería de mostrar la página de resultados y mandamos llamar a una función PHP a la que le pasamos nuestra conexión PHP previamente inicializada, el termino de búsqueda y una condición de ubicación.
Hasta aquí sin problemas!
Codigo PHP
En mi ejemplo hay una parte donde muestro el numero de resultados totales de la búsqueda del usuario, esta parte la tengo antes de la páginación.
Si deseas implementar también este texto del tipo ‘Encontramos x registro(s)’ el código para obtener los registros totales es fácil:
/* NUM REGISTROS */ $sqlcount = "//CONSULTA//"; $resultcount = mysqli_query($link, $sqlcount); if (!$resultcount) { trigger_error('ERROR: ' . $link->error); } $resultados = $resultcount->num_rows;
Como vez los guardamos en la variable $resultados que podremos imprimir en cualquier lugar que deseemos.
Ahora si comencemos con la paginación del tipo página siguiente – página anterior.
Lo primero será definir cual será nuestro limite de resultados que queremos mostrar por página, en mi caso 2.
$limite = 2;
Luego tenemos que obtener y definir el numero de página donde esta el usuario asi como el offset.
if( isset($_GET['pagina'] ) ) { $pagina = $_GET['pagina']; $offset = $limite * ($pagina -1) ; }else { $pagina = 1; $offset = 0; }
Como puedes ver primero revisamos si la url contiene la variable get página, sino la encuentra definimos que estamos en la página 1 de resultados y el offset (es decir, desde donde comenzaremos a obtener registros) a 0. Si encuentra la variable get página entonces ese será el valor de dicha variable página y el offset lo calculamos a partir del valor de limite por página actual menos 1 ( limite * ( pagina – 1 ) ).
Con esto ya tendremos definido siempre 3 cosas: el limite de resultados, la página actual y el offset dependiendo de la página actual.
Lo siguiente ya sería tener la consulta que queremos hacer a la base de datos pero al final de esta debemos incluir el limite y offset que hemos definido anteriormente..
$sql .= " .. limit $limite offset $offset "; $result = mysqli_query($link, $sql); if (!$result) { trigger_error('ERROR: ' . $link->error); } if($result->num_rows>0){ ... .. .
De esta forma la consulta a la base de datos traera resultados dependiendo del limite y offset indicados.
Si estamos en una página 2 con un limite de 2 entonces el offset será de 2 (es decir, traerá 2 registros a partir del registro 2 – el registro 0 y 1 ya se habrían mostrado en la página 1) y asi sucesivamente dependiendo del numero de página solicitada.
¿Cómo mostrar el botón de Página Anterior y Siguiente?
Hasta ahora ya hemos visto el uso de limit y offset asi como también hemos visto como implementarlo en la consulta.
Ya sabemos como realizar las consultas a la base de datos para obtener resultados desde una posición inicial o una siguiente, ahora vamos a ver como mostrarlo a la vista del usuario y permitirle a él elegir que resultados ver.
Para esto vamos a mostrar 2 pequeños botones: uno para ir a la página anterior y otro para ir a la página siguiente.
También cuando sea la primer página que no muestre el botone de anterior pues ya no hay más registros, asi mismo cuando este en la última página que ya no muestre el boton de siguiente pues ya no hay más resultados.
echo '<div class="ResultPagePagination">'; $url = strtok($_SERVER["REQUEST_URI"],'?'); if( $pagina == 1 ) { echo '<a class="onelevel" href = "'.$url.'?pagina='.($pagina + 1).'"><i class="fa fa-angle-right" aria-hidden="true"></i></a>'; }else if( $pagina == ($resultados/$limite) ) { echo '<a class="onelevel" href = "'.$url.'?pagina='.($pagina-1).'"><i class="fa fa-angle-left" aria-hidden="true"></i></a>'; }else if($pagina > 1){ echo '<a class="onelevel" href = "'.$url.'?pagina='.($pagina-1).'"><i class="fa fa-angle-left" aria-hidden="true"></i></a> '; echo '<a class="onelevel" href = "'.$url.'?pagina='.($pagina+1).'"><i class="fa fa-angle-right" aria-hidden="true"></i></a>'; } echo '</div>';
Como puedes ver mostramos un div y 3 condiciones dentro de él, una condición en caso de que sea la primer página (unicamente se mostrará el boton de siguiente), una condición en caso de que sea la última página (unicamente se mostrará el boton de anterior) y el caso en que sea una página intermedia (se mostrará ambos botones).
Utilizamos iconos de font awesome pero tú podrias mostrar texto con en lugar de las flechas.
El resultado es el siguiente:
¿Que te parecio el tutorial? ¿Lo has podido implementar en tu proyecto?
Por cierto: ¿Conoces la función ceil de PHP? Te permite redondear un número hacia arriba, útil para continuar con este proyecto.
Más adelante realizaremos un sistema de páginación un poco más avanzado con botones de ir a la última página y numeraciónes.
Si este post sobre como hacer una paginación básica con PHP te fue de utilidad no olvides compartirlo en tus redes sociales y dejarme un comentario abajo.
Hasta luego!