Buenas
Seguramente te ayuden otros foreros que sepan más de esto, pero si quieres yo te digo mi forma chapucera (debería haberme puesto el nick de Kamae_Chapuzas) xD
Yo lo que hago simplemente es hacer una query
Código PHP:
$maxPag=15;
// Numero de registros que seran mostrados por pagina
$query=mysql_query("SELECT count(cualquier_campo) FROM tabla");
// Numero de registros existentes en la BBDD
$cont=mysql_fetch_row($query);
$cont=$cont[0];
// Con esto ya tenemos guardado cuantas hay en la variable cont
$pagTotal=$cont/$maxPag;
if ($pagTotal!=(int)$pagTotal){
$pagTotal=(int)$pagTotal+1;
// Esta variable sera la que determinara cuantas paginas habra segun el numero
// de registros existentes y el numero de registros que queremos mostrar por pagina
// Si el número $pagTotal no ha quedado como un entero sin decimales,
// lo redondeamos al alza
}
echo "< Pagina ";
$i=0;
while(($pagTotal-$i)>0){
$pag[($pagTotal-$i)]=$pagTotal-$i;
$i++;
// Esto solo es para que muestre las paginas de forma ascendente luego
}
$i=1;
while(isset($pag[$i])){
if(isset($pag[($i+1)])){
echo '<b><a href="tu_pagina.php?page='.$pag[$i].'">'.$pag[$i].' </a></b> - ';
// Si existe otra pagina, separalas por guion -
}else {
echo '<b><a href="tu_pagina.php?page='.$pag[$i].'">'.$pag[$i].'</a></b>';
// Si ya es la ultima pagina no le pongas ningun guion detras
}
$i=$i+1;
}
echo ' >';
Luego haces tu consulta como si fueras a mostrarla, y antes de mostrarla de verdad dentro del while, pones una condición if:
Código PHP:
mysql_query(...blabla...);
mysql_fetch_row(...blabla...);
$cont=0;
while(...blabla...){
$cont++;
if(($cont<=$_GET["page"]*$maxPag)and($cont>(($_GET["page"]*$maxPag)-$maxPag))){
// Aqui puedes poner el codigo para mostrar
// La condicion esta lo que comprueba es que si el numero de pagina multiplicado por
// el numero de registros permitidos por pagina (por ejemplo, 2*15=30)
// es menor o igual al numero de registro actual (por ejemplo 22, que es menor)
// y a la vez es mayor que lo anterior restándole el número de registros por pagina
// (por ejemplo, permitimos 15 por pag, estamos en la pagina 2 (2*15=30)
// pues 30-15=15). 22 es más grande que 15 y más pequeño que 30, lo mostraría.
}
}
Lo sé, es muy chapuzas habiendo una función que te lo haga (que yo desconocía
), además que sacas todos los registros para sólo aprovechar unos pocos. Debo decir que el rendimiento va bien pero en intranet, no lo he probado en un servidor internet.
Bueno no sé, lo pongo por si quieres adaptarlo en un momento y ver si de rendimiento te anda bien.
Saludos