Yo tengo algo parecido...
Te lo he cambiado un poco, pq lo tenia en una clase... pero bueno xD
Código PHP:
function getPageLine($page) {
return '<li>'.($page).'</li>';
}
function getPages($current_page, $total_pages, $max_pages_show = 5) {
$paginator = '<ul>';
$divider = floor($max_pages_show / 2);
$page_lines = array();
for($i = ($current_page - $divider); $i <= ($current_page + $divider); $i++) {
$page = $i > 0 ? $i : $max_pages_show-abs($i);
if($page > $total_pages) $page = $i - $max_pages_show;
$page_lines[$page] = getPageLine($page);
}
ksort($page_lines);
foreach($page_lines as $page => $line) if($page > 0) $paginator .= $line;
$paginator .= '</ul>';
return $paginator;
}
echo getPages(11,30,15);
Es algo sencillo que hice, y q he ido "puliendo" (al principio era un desastre de condicionales!).
Está más o menos bonito. Funciona bien con máximos impares (xD), y te muestra las N-páginas más cercanas a la página actual :D
Podrías adaptarlo a tus necesidades. Un saludo!
EDIT: Salió de aqui:
http://www.forosdelweb.com/f18/optim...nales-1101264/, por si quieres leer algún comentario ;)