Foros del Web » Programando para Internet » PHP »

Paginador de resultados limitado

Estas en el tema de Paginador de resultados limitado en el foro de PHP en Foros del Web. Buenas, estoy trabajando en una web, el la cual muestro resultados de una busqueda, pero a veces la busqueda tiene 5000 resultados, dividido 30 que ...
  #1 (permalink)  
Antiguo 07/12/2011, 10:35
 
Fecha de Ingreso: agosto-2010
Mensajes: 177
Antigüedad: 10 años, 10 meses
Puntos: 5
Pregunta Paginador de resultados limitado

Buenas, estoy trabajando en una web, el la cual muestro resultados de una busqueda, pero a veces la busqueda tiene 5000 resultados, dividido 30 que son las que muestro por pagina, el paginador se hace muy largo, lo que quiero es achicarlo al estilo google por dar un ejemplo conocido, cuando estas en el 1 te muestra hasta el 10, y si estas en el 10 te muestra desde el 1 hasta el 20, posicionado en el 10!


Como se les ocurre que lo pueda hacer? les muestro como lo imprimo actualmente:
Cita:
$total_paginas = ceil($total_registros / $registros);

if(($pagina - 1) > 0) {
echo "<a href='?pagina=".($pagina-1)."'>< Anterior</a> ";
}

for ($i=1; $i<=$total_paginas; $i++){
if ($pagina == $i) {
echo "<b>".$pagina."</b> ";
} else {
echo "<a href='?pagina=$i'>$i</a> ";
} }

if(($pagina + 1)<=$total_paginas) {
echo " <a href='?pagina=".($pagina+1)."'>Siguiente ></a>";
}
echo '<br>';
echo' Total de registros ';
echo $total_registros;

Agradezco desde ya!
  #2 (permalink)  
Antiguo 07/12/2011, 10:45
 
Fecha de Ingreso: enero-2008
Ubicación: Buenos Aires
Mensajes: 305
Antigüedad: 13 años, 5 meses
Puntos: 14
Respuesta: Paginador de resultados limitado

En el for donde imprimis los vínculos de las páginas, estas haciendo un for del total de paginas y si quieres acortar eso, hazlo de la cantidad que quieras mostrar.

Código PHP:
Ver original
  1. $paginas_a_mostrar = 10; // La cantidad de páginas que quieras mostrar
  2. for ($i=1; $i<=$paginas_a_mostrar; $i++){
  3.     if ($pagina == $i) {
  4.         echo "<b>".$pagina."</b> ";
  5.     }
  6.     else {
  7.         echo "<a href='?pagina=$i'>$i</a> ";
  8.     }
  9. }
  #3 (permalink)  
Antiguo 07/12/2011, 10:48
Avatar de afrodriguez70  
Fecha de Ingreso: octubre-2011
Ubicación: Tulua-Colombia
Mensajes: 44
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: Paginador de resultados limitado

Mirate este ejemplo!!

Código PHP:
Ver original
  1. <?
  2.  
  3. // Registros a mostrar en cada página
  4. $regVistos = 10;
  5.  
  6. // Consulta que devuelve todos los registros
  7. $lista0 = mysql_query(" SELECT * FROM registros");
  8.  
  9. // Se cuentan los registros devueltos por la consulta SQL $lista0
  10. $totalSql = mysql_num_rows($lista0);
  11.  
  12. // Páginas que van a aparecer, redondeando los decimales siempre hacia arriba
  13. $pagTotal = ceil($totalSql/$regVistos);
  14.  
  15. // Se definen la página actual (desde el parámetro 'pag' de la URL) y las páginas anterior y siguiente
  16. if (!isset($_GET['pag'])) {$pagActual=1;} else {$pagActual=$_GET['pag'];}
  17. $pagAnterior = $pagActual-1;
  18. $pagSiguiente = $pagActual+1;
  19.  
  20. // Consulta SQL con la que se sacará el listado de registros
  21. $lista1 = mysql_query(" SELECT * FROM registros ORDER BY campo DESC LIMIT ".(($pagActual-1)*$regVistos).",".$regVistos."");
  22. // Bucle para generar el listado de registros
  23. while($fila = mysql_fetch_assoc($lista1)) {
  24.  // Aquí irá el código PHP que escriba los registros
  25. }
  26.  
  27. // Se inicia el listado de páginas
  28. echo '<ul>';
  29.  
  30. // Si la página actual no es la primera, se muestra el enlace a la página anterior
  31. if ($pagAnterior>0) {echo '<li class="anterior"><a href="lista.php?pag='.$pagAnterior.'"><span class="oculto">Página </span>Anterior</a></li>';}
  32.  
  33. // Se saca el listado de páginas mediante un bucle
  34. $pgIntervalo = 3; // Páginas que aparecen antes y después de la actual
  35. $pgMaximo = ($pgIntervalo*2)+1; // Máximo de páginas en el listado
  36. $pg=$pagActual-$pgIntervalo;$i=0;
  37. while ($i<$pgMaximo) {
  38.  if ($pg==$pagActual) {$strong=array('<strong>','</strong>');} else {$strong=array('','');}
  39.  if ($pg>0 and $pg<=$pagTotal) {
  40.   echo '<li>'.$strong[0].'<a href="lista.php?p='.$_GET['p'].'&amp;pag='.$pg.'"><span class="oculto">Página </span>'.$pg.'</a>'.$strong[1].'</li>';
  41.   $i++;
  42.  }
  43.  if ($pg>$pagTotal) {$i=$pgMaximo;} // Si la página que se va a mostrar se pasa de la cantidad de páginas definidas en $pagTotal se para la generación de elementos de lista
  44.  $pg++;
  45. }
  46.  
  47. // Si la página actual no es la última, se muestra el enlace a la página siguiente
  48. if ($pagSiguiente<=$pagTotal) {echo '<li class="siguiente"><a href="lista.php?p='.$_GET['p'].'&amp;pag='.$pagSiguiente.'"><span class="oculto">Página </span>Siguiente</a></li>';}
  49.  
  50. // Se finaliza el listado de páginas
  51. echo '</ul>';
  52. ?>
__________________
Si el hombre no ha descubierto nada por lo que morir, no es digno de vivir. <<Martin Luther King>>
  #4 (permalink)  
Antiguo 08/12/2011, 06:25
 
Fecha de Ingreso: agosto-2010
Mensajes: 177
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: Paginador de resultados limitado

para los que les interese, lo termine solucionando asi:

Cita:
$total_paginas = ceil($total_registros / $registros);

if(($pagina - 1) > 0) {
echo "<a href='?pagina=".($pagina-1)."'>< Anterior</a> ";
}

$semuestran=$pagina+9;
if ($pagina<=10){
$empezamosporla=1;
}else{
$empezamosporla=$pagina-10;
}
for ($i=$empezamosporla; $i<=$semuestran; $i++){
if ($pagina == $i) {
echo "<b>".$pagina."</b> ";
} else {
echo "<a href='?pagina=$i'>$i</a> ";
} }

if(($pagina + 1)<=$total_paginas) {
echo " <a href='?pagina=".($pagina+1)."'>Siguiente ></a>";
}
echo '<br>';
echo' Total de registros ';
echo $total_registros;

de esta manera si estamos en la pagina 1, vemos hasta la 10, si estamos en la 10 vemos de la 1 a las 20 y si estamos en la 20 vemos de la 10 a la 30


Saludos!

Etiquetas: limitado, paginador, registro, resultados
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:51.