Foros del Web » Programando para Internet » PHP »

Como mejorar paginación?

Estas en el tema de Como mejorar paginación? en el foro de PHP en Foros del Web. Buenas tengo un sistema de paginación sencillo al cual quiero hacerle unas mejoras y necesitaria que me orientaran ya que soy bastante noob en este ...
  #1 (permalink)  
Antiguo 06/09/2011, 02:08
 
Fecha de Ingreso: marzo-2008
Mensajes: 60
Antigüedad: 16 años
Puntos: 0
Como mejorar paginación?

Buenas tengo un sistema de paginación sencillo al cual quiero hacerle unas mejoras y necesitaria que me orientaran ya que soy bastante noob en este tema.

Les dejo el codigo:

Código PHP:
//Limito la busqueda 
$TAMANO_PAGINA 5

//examino la página a mostrar y el inicio del registro a mostrar 
$pagina $_GET["pagina"]; 
if (!
$pagina) { 
        
$inicio 0
        
$pagina=1

else { 
       
$inicio = ($pagina 1) * $TAMANO_PAGINA
}
//miro a ver el número total de campos que hay en la tabla con esa búsqueda 
$ssql "select * from noticias"
$rs mysql_query($ssql); 
$num_total_registros mysql_num_rows($rs); 
//calculo el total de páginas 
$total_paginas ceil($num_total_registros $TAMANO_PAGINA); 

//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>"
echo 
"Se muestran páginas de " $TAMANO_PAGINA " registros cada una<br>"
echo 
"Mostrando la página " $pagina " de " $total_paginas "<p>"
//construyo la sentencia SQL 
$ssql "select * from noticias limit " $inicio "," $TAMANO_PAGINA
$rs mysql_query($ssql); 
while(
$f=mysql_fetch_array($rs)){
echo 
'<tr>'.$f['fecha'].'</td><br />';
echo 
'<tr>'.$f['titulo'].'</td><br />';
echo 
nl2br (substr(($f['noticia']),0,150)) . "..."
echo 
'<tr><a href="noticia.php?id='.$f['id'].'">[Ver noticia completa]</a><br /><br /><br />'
}
//cerramos el conjunto de resultado y la conexión con la base de datos 
mysql_free_result($rs); 
//muestro los distintos índices de las páginas, si es que hay varias páginas 
if ($total_paginas 1){ 
       for (
$i=1;$i<=$total_paginas;$i++){ 
           if (
$pagina == $i
              
//si muestro el índice de la página actual, no coloco enlace 
              
echo $pagina " "
           else 
              
//si el índice no corresponde con la página mostrada actualmente, coloco el enlace para ir a esa página 
              
echo "<a href='paginacion.php?pagina=" $i ."'>" $i "</a> "
       } 

Con este codigo la paginacion de muestra de la siguiente forma:
(Supongamos tengo 15 paginas de resultados)

Cita:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
En lo que me gustaria me orientes es en como podria lograr que se resalte el numero de la pagina en la cual me encuentro, como limitar el numero de paginas que se muestran y que siempre este la opcion de ir tanto a la primer pagina como a la ultima.
Algo asi:

Cita:
1... 7 8 9 ... 15
Gracias.
  #2 (permalink)  
Antiguo 06/09/2011, 02:16
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Como mejorar paginación?

Buenas,

A ver, obviamente el trozo de código que tienes que cambiar es este:
Código PHP:
Ver original
  1. //muestro los distintos índices de las páginas, si es que hay varias páginas
  2. if ($total_paginas > 1){
  3.        for ($i=1;$i<=$total_paginas;$i++){
  4.            if ($pagina == $i)
  5.               //si muestro el índice de la página actual, no coloco enlace
  6.               echo $pagina . " ";
  7.            else
  8.               //si el índice no corresponde con la página mostrada actualmente, coloco el enlace para ir a esa página
  9.               echo "<a href='paginacion.php?pagina=" . $i ."'>" . $i . "</a> ";
  10.        }
  11. }

Aquí tienes en $total_paginas el número de la última página y en $pagina el número de la actual.

La cosa es tan sencilla como quitar el bucle, ya que no quiere mostrar todo, y poner en su lugar un enlace a la primera página (1), unos puntos suspensivos, un enlace a $pagina - 1, luego $pagina en negrita y rojo, un enlace a $pagina + 1 y, por último, un enlace a la última ($total_paginas). Lo único que tienes que intentar controlar son los límites de las páginas, es decir que si, por ejemplo, $pagina + 1 ya es $total_paginas, no tienes que imprimir ese enlace.

Es sencillo, inténtalo y si tienes problemas ven con algo de código, te guiaré.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #3 (permalink)  
Antiguo 06/09/2011, 14:59
 
Fecha de Ingreso: marzo-2008
Mensajes: 60
Antigüedad: 16 años
Puntos: 0
Respuesta: Como mejorar paginación?

Gracias vgonga, logre avanzar un poco pero se me complico con los limites,

Destacar en negrita y rojo la pagina en la que estamos, listo, la deje solo en negrita:

Código PHP:
//si muestro el índice de la página actual, no coloco enlace 
              
echo "<strong>".$pagina."</strong>"
Con el tema de limitar las paginas que se muestran probe con lo siguente:

Código PHP:
if ($total_paginas>1) {
  
$ini $pagina-1;
  
$fin $pagina+1;
} else {
  
$ini 1;
  
$fin total_paginas;
}
for (
$i=$ini;$i<=$fin;$i++){ 
         if (
$pagina == $i
              
//si muestro el índice de la página actual, no coloco enlace 
              
echo "<strong>".$pagina."</strong>"
           else 
              
//si el índice no corresponde con la página mostrada actualmente, coloco el enlace para ir a esa página 
              
echo "<a href='paginacion.php?pagina=" $i ."'>" $i "</a> "
       } 
El problema que me da es que al estar en la primer pagina me da la opcion de ir a la pagina 0 y asi sucesivamente, -1,-2,-3, igual al llegar a la ultima suponiendo que tenga 15 sigue con 16, 17, 18...
No sabria como limitarlo para que no supere ni la primer ni la ultima pagina, quizas tu forma es mas sencilla pero no supe como encararlo.
  #4 (permalink)  
Antiguo 06/09/2011, 15:36
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Como mejorar paginación?

Te pongo un pseudocódigo para el siguiente formato:
Primera ... 3 4 5 ... Última
Código PHP:
Ver original
  1. Si $total_paginas == 1:
  2.    // Ni si quiera pongas paginación (queda mejor si con una sola página ni te sale)
  3. Si no si $total_paginas > 1:
  4.    // Primera: <a ?pagina=1>Primera</a>
  5.    ...
  6.    Si $pagina != 1:
  7.       // Anterior: <a ?pagina=$pagina - 1>$pagina - 1</a>
  8.    <strong>$pagina</strong>
  9.    Si $pagina != $total_paginas
  10.       // Siguiente: <a ?pagina=$pagina + 1>$pagina + 1</a>
  11.    ...
  12.    // Última: ?pagina=$total_paginas
  13. Si no:
  14.   // Error, no puede ser 0 (significaría que la consulta no ha devuelto nada).

Con este pseudocódigo, además, si la página es la primera no te aparece la anterior y, si es la última, tampoco te aparece la siguiente. Si te das cuenta, he eliminado el bucle, no te hace falta si sólo vas a poner anterior y siguiente, si quieres poner más de anterior y siguiente, por ejemplo, las 6 más cercanas (3 hacia atrás, 3 hacia adelante) entonces sí lo necesitarás.

Hay muchas formas de hacerlo según quieras dejar el final, puedes aumentarlo, quitar cosas, poner otras, lo único que tienes que tener claro dónde tienes cada valor y qué significa.

Un saludo, espero que te sirva.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #5 (permalink)  
Antiguo 06/09/2011, 18:43
 
Fecha de Ingreso: marzo-2008
Mensajes: 60
Antigüedad: 16 años
Puntos: 0
Respuesta: Como mejorar paginación?

Es perfecto, solo tengo un problema de sintaxis por el cual suponiendo que este en la pagina 6 la paginacion en vez de verse asi:

Cita:
1... 5 6 7 ...15
Me queda asi:

Cita:
1... 6-1 6 6+1 ...15
por lo que me llevan a la url ?pagina=6+1, lo cual no es nada.

Dejo el codigo a ver si me podes guiar en que variarle para que me lleve a la url correcta.

Código PHP:
//muestro los distintos índices de las páginas, si es que hay varias páginas 
if ($total_paginas>1) {
  echo 
'<a href="paginacionprueba.php?pagina=1">1</a>';
  echo 
"...";
  }
if (
$pagina!= 1) {
 
  echo 
"<a href='paginacionprueba.php?pagina=$pagina-1'>$pagina-1</a>";
  echo 
"<strong>".$pagina."</strong>";
  }
if (
$pagina!= $total_paginas) {
  echo 
"<a href='paginacionprueba.php?pagina=$pagina+1'>$pagina+1</a>";
  echo 
"...";
  echo 
"<a href='paginacionprueba.php?pagina=$total_paginas'>".$total_paginas."</a>";
  } 
  #6 (permalink)  
Antiguo 06/09/2011, 23:15
 
Fecha de Ingreso: marzo-2008
Mensajes: 60
Antigüedad: 16 años
Puntos: 0
Respuesta: Como mejorar paginación?

Probe tambien sacando $pagina-1 de las comillas a ver si era que en vez de pedirle que sume le estaba pidiendo que lo escriba pero tampoco lo pude solucionar.

Dejo como probe:

Código PHP:
echo "<a href='paginacionprueba.php?pagina=".$pagina-1."'>$pagina-1</a>"
  #7 (permalink)  
Antiguo 07/09/2011, 01:17
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Como mejorar paginación?

Utiliza concatenación, porque si no, no se aplicarán las sumas:
Código PHP:
Ver original
  1. echo '<a href="paginacionprueba.php?pagina=' . ($pagina + 1) . '">' . ($pagina + 1) . '</a>';
  2.  
  3. echo '<a href="paginacionprueba.php?pagina=' . ($pagina - 1) . '">' . ($pagina - 1) . '</a>';

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #8 (permalink)  
Antiguo 07/09/2011, 02:50
 
Fecha de Ingreso: marzo-2008
Mensajes: 60
Antigüedad: 16 años
Puntos: 0
Respuesta: Como mejorar paginación?

Perfecto, ahi quedo, Gracias me ayudaste demaciado :D
  #9 (permalink)  
Antiguo 07/09/2011, 03:01
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Como mejorar paginación?

Nada, me alegro que lo arreglaras.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #10 (permalink)  
Antiguo 07/09/2011, 06:37
 
Fecha de Ingreso: agosto-2009
Mensajes: 1
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Como mejorar paginación?

Gracias vgonga1986, me gusto tu aclaracion yo tambien soy novato.... jjajajaja

Etiquetas: paginacion, sql
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 20:51.