Así a bote pronto, para calcular las páginas del medio, se me ocurre sacar la media del total de páginas, y añadir por delante y por detrás.
La teoría sería, si tienes 100 páginas:
Media: 50
Media - 2 = 48
Media + 2 = 52
Luego hacer un bucle que llegue de 48 a 52.
Habría que redonder la media con floor() o algo.
No sé si te ayudará algo esta idea.