Aquí va una idea, mostrando 9 páginas, de forma que la actual se muestre en medio cuando sea posible, en seudo-código y asumiendo algunos resultados:
Código:
pag_lados = 4
pag_total = 20
pag_actual = 5
si pag_total < ((pag_lados * 2) + 1) {
// No calculamos si no es necesario
inicio = 1
fin = pag_total
} else {
// Calculamos y ajustamos si sobrepasamos los límites
inicio = pag_actual - pag_lados
si inicio < 1 {
inicio = 1
}
fin = inicio + (pag_lados * 2)
si fin > pag_total {
fin = pag_total
inicio = fin - (pag_lados * 2)
}
}
// Mostrar página de inicio y página anterior solo si pag_actual es mayor que 1
si pag_actual > 1 {
echo "Inicio" // Cada una con su enlace, obviamente
echo "Anterior"
}
// Ahora mostramos los enlaces de cada página
for i = inicio; i <= fin; i++ {
echo i // con su respectivo enlace
}
// Mostrar página siguiente y final solo si pag_actual es menor que pag_total
si pag_actual < pag_total {
echo "Siguiente"
echo "Fin"
}
Debería funcionar... o eso creo!