He estado jugando un poco con algunas paginaciones y he sacado esta de entre varias versiones. Tiene poco codigo y funciona muy bien, solo ponganle ajustes css y se les verá muy pero muy bien.
Espero les sirva
Código PHP:
$conn = mysql_connect("localhost", "usuario", "password") or die(mysql_error());
mysql_select_db("bd", $conn) or die(mysql_error());
// limito la busqueda
$limit = 10;
//examino la página a mostrar y el inicio del registro a mostrar
$pagina = $_GET['p'];
if (!$pagina) {
$inicio = 0;
$pagina=1;
}
else {
$inicio = ($pagina - 1) * $limit;
}
//muestro el número total de campos que hay en la tabla con esa búsqueda
$ssql = "SELECT * FROM tabla ";
$rs = mysql_query($ssql);
$num_total_registros = mysql_num_rows($rs);
//calculo el total de páginas
$total_paginas = ceil($num_total_registros / $limit);
//pongo el número de registros total, el tamaño de página y la página que se muestra
echo "Número de registros encontrados: " . $num_total_registros . "<br>Mostrando la página: " . $pagina . "/" . $total_paginas . "<br><br>";
//realizamos la busqueda y limitamos la cantidad a mostrar
$sql2 = "SELECT * FROM tabla ORDER BY id LIMIT " .$inicio. "," .$limit. "";
$query2 = mysql_query($sql2);
while ($rows = mysql_fetch_array($query2)) {
echo ''.$rows['titulo']. '<br> '.$rows['descripcion'].'<br><br>';
}
echo '<br>';
// aqui empieza la paginacion
// restamos en uno el $id
$idrest = $pagina-1;
// aumentamos en uno el $id
$idadd = $pagina+1;
// definimos la cantidad de paginaciones a mostrar
// definimos la url previous
if ($pagina == 1) {
echo '<Previous ';
} else {
echo '<a href="index.php?p='.$idrest.'"><Previous</a> ';
}
// definimos la cantidad de registros definidos por rango
//rango
$rango = 8;
//lo definimos
$rangoizq = max(1,$pagina-(($rango-1)/2));
$rangoder = min($total_paginas, $pagina+(($rango-1)/2));
if (($rango - $rangoizq) < ($rango - 1)) {
if ($rangoizq == 1) {
$rangoder = min($rangoizq + ($rango-1), $total_paginas);
} else {
$rangoizq = max($rangoder - ($rango -1), 0);
}
}
//defino el next
if ($rangoizq > 1) {
echo '...';
} else {
echo ' ';
}
for ($i = 1; $i <= $total_paginas; $i++) {
if ($i == $pagina) {
echo $i;
} else {
if ($rangoizq <= $i && $i <= $rangoder) {
echo ' [<a href="index.php?p='.$i.'">' .$i. '</a>] ';
}
}
}
if ($rangoder < $total_paginas) {
echo '...';
} else {
echo ' ';
}
if (($num_total_registros - ($limit * $pagina)) > 0) {
echo ' <a href="index.php?p='.$idadd.'">Next ></a>';
} else {
echo ' Next >';
}