generarPaginador($pagina_actual, $total_paginas, $por_pagina)
Propósito de la función
Genera un componente visual (paginador) que permite navegar entre diferentes páginas de resultados, comúnmente usado en listados de datos.
🔧 Parámetros que recibe:
$pagina_actual: La página en la que se encuentra el usuario$total_paginas: Cuántas páginas existen en total$por_pagina: Cuántos elementos se muestran por página
🧩 Estructura del paginador:
[«] [1] [2] [3] [4] [5] [»]🔍 Desglose del código:
1. Botón "Anterior" (←)
if ($pagina_actual > 1) {
// Habilita el botón si NO estamos en la primera página
$html .= '<a href="?page='.($pagina_actual - 1).'">←</a>';
} else {
// Deshabilita el botón si estamos en la primera página
$html .= '<span class="disabled">←</span>';
}2. Números de páginas
$inicio = max(1, $pagina_actual - 2); // Muestra desde 2 páginas antes
$fin = min($total_paginas, $pagina_actual + 2); // Hasta 2 páginas después
for ($i = $inicio; $i <= $fin; $i++) {
if ($i == $pagina_actual) {
// Página actual (resaltada)
$html .= '<span class="active">'.$i.'</span>';
} else {
// Otras páginas (clickeables)
$html .= '<a href="?page='.$i.'">'.$i.'</a>';
}
}3. Botón "Siguiente" (→)
if ($pagina_actual < $total_paginas) {
// Habilita el botón si NO estamos en la última página
$html .= '<a href="?page='.($pagina_actual + 1).'">→</a>';
} else {
// Deshabilita el botón si estamos en la última página
$html .= '<span class="disabled">→</span>';
}🎯 Ejemplo práctico:
Si tenemos:
$pagina_actual = 3$total_paginas = 10$por_pagina = 20
El paginador se vería así:
[←] [1] [2] [3] [4] [5] [→]URL generada: ?page=4&limit=20 (al hacer clic en la página 4)
💡 Ventajas de este diseño:
Navegación intuitiva con botones anterior/siguiente
Vista contextual - muestra páginas cercanas a la actual
Estado visual claro - página actual resaltada, botones deshabilitados cuando corresponda
Responsive - usa clases de Bootstrap para buen diseño
📊 Cómo calcular los datos para llamar la función:
$total_elementos = 100; // Total de registros en la base de datos
$por_pagina = 20; // Elementos por página
$pagina_actual = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$total_paginas = ceil($total_elementos / $por_pagina);
echo generarPaginador($pagina_actual, $total_paginas, $por_pagina);Esta función es esencial para cualquier aplicación que maneje grandes cantidades de datos y necesite dividirlos en páginas para mejor usabilidad.
La función
generarPaginadornecesita saber el$total_paginas(que depende de$total_solicitudes) para:Saber cuándo mostrar/ocultar el botón "Siguiente"
Saber cuántos números de página mostrar
Determinar si la página actual es la última
Flujo del proceso:
Obtener total:
$total_solicitudes = obtenerTotalSolicitudes($pdo);Calcular páginas:
$total_paginas = ceil($total_solicitudes / $por_pagina);Obtener datos paginados:
$solicitudes = obtenerSolicitudesPaginadas($pdo, $inicio, $por_pagina);
La función obtenerSolicitudesPaginadas solo obtiene un subconjunto de datos (los que corresponden a la página actual), mientras que $total_solicitudes representa el conjunto completo de datos, que es necesario para la lógica de paginación.
Comentarios
Publicar un comentario