Paginación con Paginator.

Resumen.

Ya hemos visto cómo hacer una paginación básica usando LIMIT, ahora vamos a ver un método de paginación más elaborado, casi perfecto (por no decir perfecto) que nos permitirá varias opciones como el número de resultados por página, el número de enlaces de paginación o asignar un estilo a los enlaces de paginación. También hará un recuento de los resultados de cada consulta.

Artículo.

Como ya dijimos en el artículo dedicado a leer resultados, cuando el número de resultados es muy elevado, la opción que tenemos es dividir las consultas en diferentes páginas, lo que llamamos paginar o paginación.

Ya hemos visto una forma de paginar que puede resultar un tanto complicada, ahora vamos a ver una forma de paginación muy eficaz y sencilla de montar, solo tenemos que cargar mediante un “include()” el archivo de paginación. Se trata del Paginator desarrollado por Jorge Pinedo. El código para este paginador ya montado es el siguiente:

<?php
// Lectura paginada con Paginator de una tabla MySQL

include('archivos/func_conexionBD.php');
include('archivos/funcion_orden_fecha.php');

$Conex_BD = ConectaBD();

$_pagi_sql = "SELECT * FROM $tb1 ORDER BY id DESC";
$_pagi_result = mysqli_query($Conex_BD, $_pagi_sql);

$_pagi_cuantos = 10; // Numero de registros por pagina
$_pagi_nav_estilo = 'cls_pagi'; // Formato CSS para la barra de navegacion
$enlacesdepaginacion = 5; // Numero de enlaces de paginacion, solo IMPARES o cero 0

$Conecta_BD = $Conex_BD;
include('archivos/paginator.php');

echo '<div align="center"><table border="1" width="80%">
<tr>
<td><b>Id</b></td>
<td><b>Usuario</b></td>
<td><b>Email</b></td>
<td><b>Fecha</b></td>
</tr>';

while($registro = mysqli_fetch_array($_pagi_result)){

echo "<tr>
<td>".$registro['id']."</td>
<td><a href=\"ficha_usuario.php?us=".$registro['usuario']."\" title=\"Ver ficha del usuario\">".$registro['usuario']."</a></td>
<td>".$registro['email']."</td>
<td>".Forma_Fecha($registro['f_regis'])[5]."</td>
</tr>";
}
echo '</table></div>';

DesconectaBD($Conex_BD);

// Definimos la barra de navegación

$navegacion_pagineitor1 = "
<div id=\"barra_info\">
<p class=\"n_registros\">El total de registros es $_Num_regis_Consul</p>
</div>
";

$navegacion_pagineitor2 = "
<div id=\"barra_info\">
<p class=\"paginador\">$_pagi_navegacion</p>
<p class=\"n_registros\">$_pagi_info</p>
</div>
";

// Condicional para que aparezca las barras de navegación según el numero de registros

if ($_Num_regis_Consul <= $_pagi_cuantos) {
echo "$navegacion_pagineitor1";
} else {
echo "$navegacion_pagineitor2";
}

?>


Lo primero que hemos hecho ha sido cargar la función de conexión a la base de datos y orden de fecha.

Seguidamente definimos nuestra consulta en la variable $_pagi_sql, que es la que hemos empleado en el archivo de paginación.

$_pagi_sql = "SELECT * FROM $tb1 ORDER BY id DESC";


Consulta que, en este caso, nos leerá todos los registros ordenándolos en función del id, seguidamente, ejecutamos la consulta en la variable $_pagi_result, también esta definida en paginator.php.

Lo siguiente con que nos encontramos son tres variables que nos van a definir como realizaremos la paginación, y son:

$_pagi_cuantos = 10; // Numero de registros por pagina
$_pagi_nav_estilo = 'cls_pagi'; // Formato CSS para la barra de navegacion
$enlacesdepaginacion = 5; // Numero de enlaces de paginacion

Que por sus nombre podemos intuir a qué se refieren, por un lado tenemos el número de registros que queremos que se muestren en cada página, el estilo CSS que queremos aplicar para darle formato a nuestro gusto, y por ultimo el número de enlaces de paginación, que se mostrarán lo que dependerá del número de elementos que compongan la lista y que están contenidos en la variable $_Num_regis_Consul. Quiere esto decir que si tenemos una paginación de 30 registros por página, y tenemos 100 registros en nuestra consulta, solo nos aparecerán 4 enlaces de paginación, aunque le hayamos indicado 15. Mucho OJO, esta variable solo puede tomar valores IMPARES y si toma el valor 0, nos generará tantos enlaces de paginación como páginas existan.

Llegados a este punto tenemos que cargar el archivo de paginación paginator.php. Como ya indicamos antes, hay una serie de variables que están definidas en paginator.php, ya hemos visto dos: $_pagi_sql y $_pagi_result. Pero la llegada de PHP 7 nos obliga a incluir una variable más en paginator.php, y es la variable que establece la conexión $Conecta_BD. Por lo que, a menos que la conexión la establezcamos sobre esta variable $Conecta_BD = ConectaBD();, tendremos que igualar esta a nuestra variable de conexión.

$Conecta_BD = $Conex_BD;

Seguidamente ya podemos cargar el archivo de paginación

include('archivos/paginator.php');

Por lo demás, la paginación se realiza exactamente igual a como dijimos en el artículo dedicado a la lectura de una tabla .

Tras finalizar el bucle “while” tenemos dos estructuras condicionales cuyo objetivo es que se muestren los resultados y la barra de navegación en caso de ser necesaria.

Lógicamente si el número de registro que nos da la consulta es igual o inferior al número de registros de paginación, la barra de navegación no es necesaria, por tanto no mostramos dicha barra contenida en la variable “$_pagi_navegacion” mostrando solo el número de registros. Junto a la barra (barra de enlaces) de navegación también podemos mostrar el rango de registros que se muestran mediante la variable “$_pagi_info”.

Por ultimo, indicar que el archivo de paginación no lo presentamos y solo lo dejamos con la opción de descarga debido a su extensión, más de 400 líneas. El archivo esta suficientemente comentado por su autor y al mismo tiempo se han indicado también los cambios que hemos realizado para su adaptación a las versiones sucesivas, que van desde PHP4 hasta PHP7.
Tags: Paginator || paginación || consulta || PHP7

Comentarios.

Sin comentarios, publica el tuyo.