Problemas con paginador

[email protected] (Alexis Saucedo) Sun, 1 Nov 2015 21:25:23 -0300
Newsgroups php.general.es
Message-ID <CAAu=vQe4CqBuneH5nJV0zV-EhGCfP-WQA0EN7gUmDOOhcL=hrw@mail.gmail.com>
Buenas noches a todos! les traigo una consulta que la verdad ya agote
recursos para resolverla, tengo un paginador que muestra ejemplo:

<---anterior 1234 siguiente --->

el tema es que estoy buscando la forma de que no me muestre todos los
numeros de paginas si que los valla recorriendo, cuando tengo muchos
datos veo algo mas o menos asi:

<---anterior 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
23 24 25 26 27 28 siguiente --->

y cuando hay mas de 500 datos es infernal, el codigo que estoy usando es este:

$query = "SELECT * FROM articulos";
$result = mysqli_query($mysqli, $query);
// Count the total record
$total_records = mysqli_num_rows($result);
//Using ceil function to divide the total records on per page
$total_pages = ceil($total_records / $per_page);

for ($i=1; $i<=$total_pages; $i++) {
if($i==$_GET['page']){
$clase = 'active';
}else{
$clase = '';
}
//numeros de paginas
$paginas[$i] = array('numero'=>$i,'clase'=>$clase);
};
//array_push($articulos, 'clase', $clase);
if($total_pages==$_GET['page']){
$siguiente = $total_pages;
}else{
$siguiente = $_GET['page']+1;
}
if($_GET['page']=='1'){
$anterior = '1';
}else{
$anterior = $_GET['page']-1;
}

Alguien tiene idea como lo podria hacer?.

Saludos y muchisimas gracias.