Foros del Web » Programando para Internet » PHP »

Duda con paginador..

Estas en el tema de Duda con paginador.. en el foro de PHP en Foros del Web. Hola a todos, como estan? Este es mi primer tema en el foro. Tal vez sea algo simple pero para mi es poco complejo ya ...
  #1 (permalink)  
Antiguo 24/06/2012, 10:45
 
Fecha de Ingreso: junio-2012
Mensajes: 4
Antigüedad: 11 años, 10 meses
Puntos: 0
Duda con paginador..

Hola a todos, como estan? Este es mi primer tema en el foro.

Tal vez sea algo simple pero para mi es poco complejo ya que recien estoy empezando en lo que es la programacion web..

El problema o duda es el siguiente.

Tengo una web de frases para facebook.

Estoy usando un estilo de paginación de flickr.

El codigo es el siguiente :
Código PHP:
Ver original
  1. function paginar($count,$hasta,$pag,$link_totales,$extra_variables){
  2.  
  3.     if($link_totales==1)$link_totales=2;
  4.     $links = $count / $hasta;
  5.     $arriba = $link_totales - 2;
  6.     $abajo = $pag - 1;
  7.     if($abajo==0)$abajo = 1;
  8.     $temp_r = $links - $pag;
  9.     if($temp_r>=$arriba){
  10.      $link_break = $pag + $arriba;
  11.     }
  12.     else{
  13.      $link_break = $links;
  14.      $abajo = $pag + 1 - $arriba;
  15.      if($pag==$links-1)$abajo = $pag - $arriba;
  16.      if($pag==$links)$abajo = $pag - 1 - $arriba;
  17.     }
  18.  
  19.     if($pag==1)$link_break = $link_totales;
  20.     if($abajo==0)$abajo=1;
  21.     if(strlen($extra_variables)!=0) $extra_variables = "&".$extra_variables;
  22.    
  23.     echo '<div id="divpagination" style="align:center"><ul id="pagination-flickr">';
  24.  
  25.     if($pag==1){
  26.      $anterior = 1;    
  27.     }
  28.     else{
  29.     $anterior = $pag - 1;    
  30.     }
  31.     if($pag!=1){
  32.     echo "<li class='previous' ><a href=".$_SERVER['PHP_SELF']."?pag=".$anterior.$extra_variables.">Anterior</a></li>";
  33.     }
  34.  
  35.     for($i=$abajo;$i<=$links;$i++){
  36.      if($link_break<$i){
  37.       break;
  38.      }
  39.      else{
  40.         if($pag==$i){
  41.         echo '<li class="active">'.$i."</li>";    
  42.         }
  43.         else{
  44.         echo "<li><a href='".$_SERVER['PHP_SELF']."?pag=".$i.$extra_variables."'>".$i."</a></li>";
  45.         }
  46.      }
  47.     }
  48.     if($pag==$links){
  49.     $siguiente = $links;
  50.     }
  51.     else{
  52.     $siguiente = $pag + 1;
  53.     }
  54.     if($pag!=$links){
  55.     echo "<li class='next'><a href=".$_SERVER['PHP_SELF']."?pag=".$siguiente.$extra_variables.">Siguiente</a></li>";
  56.     }
  57.    
  58.     echo '</ul></div>';
  59. }

El paginador marca las siguientes paginas :

-6 -5 -4 -3 -2 -1 0 1 2 .. Como puedo hacer para que el paginador solo marque desde 0 en adelante y no los numeros negativos ?

Espero que este codigo sea suficiente ya que es el del paginador.

Espero que puedan ayudarme,

De antemano, GRACIAS.

Salu2
  #2 (permalink)  
Antiguo 24/06/2012, 12:33
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Duda con paginador..

Tu código tiene tantas comprobaciones que sinceramente no les veo utilidad, peor aun, el código que muestras es unicamente para mostrar la navegación de la paginación, ahora, la razón que en el numero de páginas te de números negativo es porque al final se le asigna un número negativo a $abajo, cuando lo normal es que debiera comenzar con 0, o si pretendes mostrar solo X numero de páginas (por ejemplo 5 anteriores y 5 después) solo hay que calcular que página es la actual, cuantas páginas quedan antes y después y mostrarlas en el menú...

Sinceramente, mejor usa alguna de las clases que rondan en internet para paginar resultados, ya están probadas y la mayoría son sencillas de implementar, por lo tanto no hay que "reinventar" la rueda desde 0...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #3 (permalink)  
Antiguo 24/06/2012, 12:54
 
Fecha de Ingreso: junio-2012
Mensajes: 4
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Duda con paginador..

Hola, lo haria pero sinceramente como comente antes recien empiezo en esto y me traeria más de un dolor de cabeza..

Por lo mismo pregunte si a esto se le puede hacer algo..

Espero no moleste mi respuesta, Salu2
  #4 (permalink)  
Antiguo 24/06/2012, 13:34
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Duda con paginador..

Te repito, tu código hace demasiado para lo que pretendes hacer, aparte, no muestras el código donde divides los items, tampoco indicas si es para paginar un resultado de una DB, etc...

Cita:
...recien empiezo en esto y me traeria más de un dolor de cabeza.....
Sinceramente dudo que te de mas dolor de cabeza que intentar hacer algo desde 0 con el nivel que tienes, pero bueno, eso no esta del todo mal querer hacerlo tu mismo...

Como no muestras todo el código implicado solo te podré dejar un ejemplo de como construir los links de navegación de tu paginación...

Código PHP:
Ver original
  1. //supondré que los resultados vienen en un array, ya sea de DB o de lo que fuere...
  2. $numTotalItems = count($items);
  3.  
  4. //numero de items mostrados por página...
  5. $numPerPage = 15;
  6.  
  7. //Obtenemos el numero total de páginas, como es una división probablemente obtengamos un
  8. //una fracción, por lo tanto hay que redondear el numero hacia arriba...
  9. $totalPages = ceil($numTotalItems / $numPerPage);
  10.  
  11. //verificamos en que página estamos
  12. $currentPage = (isset($_GET['page'])) ? $_GET['page'] : 1;
  13.  
  14. //verificamos si es la primera página o no
  15. if ($currentPage > 1) {
  16.      echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.($currentPage - 1).'">Anterior</a>';
  17. }
  18.  
  19. //recorremos las página existentes
  20. for($i=0; $i<=$totalPages; $i++) {
  21.      //verificamos si la página dentro del for es igual o no a la página actual
  22.      if ($i != $currentPage) {
  23.           //si no lo es imprimimos el link
  24.           echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i.'</a>';
  25.      }else {
  26.           //si es igual la destacamos como negrita y no agregamos el link
  27.           echo '<strong>'.$i.'</strong>';
  28.      }
  29. }
  30.  
  31. //vemos si la página actual es menor al total de páginas
  32. if ($currentPage < $totalPages) {
  33.      echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.($currentPage + 1).'">Siguiente</a>';
  34. }

Ahora, si obtienes muchas páginas y solo quieres mostrar las 5 anteriores, la página actual y las 5 siguientes podrías hacer algo así...

Código PHP:
Ver original
  1. //verificamos si es la primera página o no
  2. if ($currentPage > 1) {
  3.      echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.($currentPage - 1).'">Anterior</a>';
  4. }
  5.  
  6. $inicio = 1;
  7.  
  8. if ($currentPage > 5) {
  9.      $inicio = $currentPage - 5;
  10. }
  11.  
  12. $fin = $totalPages;
  13. $finTemp = $totalPages - $currentPage;
  14. if ($finTemp > 5) {
  15.      $fin = $currentPage + 5;
  16. }else {
  17.      $fin = $totalPages;
  18. }
  19.  
  20. for($i=$inicio; $i<=$fin; $i++) {
  21.     if ($i != $currentPage) {
  22.         echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i.'</a> ';
  23.     }else {
  24.         echo '<strong>'.$i.'</strong> ';
  25.     }
  26. }
  27.  
  28. if ($currentPage < $totalPages) {
  29.      echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.($currentPage + 1).'">Siguiente</a>';
  30. }
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 24/06/2012 a las 13:41
  #5 (permalink)  
Antiguo 24/06/2012, 14:04
 
Fecha de Ingreso: enero-2011
Ubicación: España
Mensajes: 222
Antigüedad: 13 años, 3 meses
Puntos: 7
Respuesta: Duda con paginador..

Yo tambien soy muy novato utliza "Zebra_Pagination" lo encontraras en la red, se implementa de forma muy facil sin apenas conocimientos y funciona perfectamente, por supuesto los hay mejores y mas complicados pero este es muy completo y lo puedes configurar a tu gusto.

Supongo que habra otros compañeros que te podrán decir mas cosas sobre el mismo que yo y te podrán aconsejar sobre este tema.

Espero que te sirva de ayuda.
  #6 (permalink)  
Antiguo 24/06/2012, 15:32
 
Fecha de Ingreso: junio-2012
Mensajes: 4
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Duda con paginador..

Cita:
Iniciado por Nemutagk Ver Mensaje
Te repito, tu código hace demasiado para lo que pretendes hacer, aparte, no muestras el código donde divides los items, tampoco indicas si es para paginar un resultado de una DB, etc...



Sinceramente dudo que te de mas dolor de cabeza que intentar hacer algo desde 0 con el nivel que tienes, pero bueno, eso no esta del todo mal querer hacerlo tu mismo...

Como no muestras todo el código implicado solo te podré dejar un ejemplo de como construir los links de navegación de tu paginación...

Código PHP:
Ver original
  1. //supondré que los resultados vienen en un array, ya sea de DB o de lo que fuere...
  2. $numTotalItems = count($items);
  3.  
  4. //numero de items mostrados por página...
  5. $numPerPage = 15;
  6.  
  7. //Obtenemos el numero total de páginas, como es una división probablemente obtengamos un
  8. //una fracción, por lo tanto hay que redondear el numero hacia arriba...
  9. $totalPages = ceil($numTotalItems / $numPerPage);
  10.  
  11. //verificamos en que página estamos
  12. $currentPage = (isset($_GET['page'])) ? $_GET['page'] : 1;
  13.  
  14. //verificamos si es la primera página o no
  15. if ($currentPage > 1) {
  16.      echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.($currentPage - 1).'">Anterior</a>';
  17. }
  18.  
  19. //recorremos las página existentes
  20. for($i=0; $i<=$totalPages; $i++) {
  21.      //verificamos si la página dentro del for es igual o no a la página actual
  22.      if ($i != $currentPage) {
  23.           //si no lo es imprimimos el link
  24.           echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i.'</a>';
  25.      }else {
  26.           //si es igual la destacamos como negrita y no agregamos el link
  27.           echo '<strong>'.$i.'</strong>';
  28.      }
  29. }
  30.  
  31. //vemos si la página actual es menor al total de páginas
  32. if ($currentPage < $totalPages) {
  33.      echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.($currentPage + 1).'">Siguiente</a>';
  34. }

Ahora, si obtienes muchas páginas y solo quieres mostrar las 5 anteriores, la página actual y las 5 siguientes podrías hacer algo así...

Código PHP:
Ver original
  1. //verificamos si es la primera página o no
  2. if ($currentPage > 1) {
  3.      echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.($currentPage - 1).'">Anterior</a>';
  4. }
  5.  
  6. $inicio = 1;
  7.  
  8. if ($currentPage > 5) {
  9.      $inicio = $currentPage - 5;
  10. }
  11.  
  12. $fin = $totalPages;
  13. $finTemp = $totalPages - $currentPage;
  14. if ($finTemp > 5) {
  15.      $fin = $currentPage + 5;
  16. }else {
  17.      $fin = $totalPages;
  18. }
  19.  
  20. for($i=$inicio; $i<=$fin; $i++) {
  21.     if ($i != $currentPage) {
  22.         echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i.'</a> ';
  23.     }else {
  24.         echo '<strong>'.$i.'</strong> ';
  25.     }
  26. }
  27.  
  28. if ($currentPage < $totalPages) {
  29.      echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.($currentPage + 1).'">Siguiente</a>';
  30. }

Hola de nuevo.. tal vez esta info sea de utilidad..

Esto tengo en tops, ultimas, y tendencias.php que seria para paginar :
Código PHP:
Ver original
  1. <?
  2.  
  3.     $rsC = mysql_query("Select count(*) from fblike");
  4.  
  5.     $resultC = mysql_fetch_array($rsC);
  6.  
  7.     $count = $resultC[0];
  8.  
  9.     $hasta = 50;
  10.  
  11.     $pag =  $_GET['pag'];
  12.  
  13.     if (!$pag  || $pag <0) {
  14.  
  15.     $desde = 0;
  16.  
  17.     $pag=1;
  18.  
  19.     }
  20.  
  21.     else {
  22.  
  23.     $pagS = $pag - 1;
  24.  
  25.     $desde = $hasta * $pagS;
  26.  
  27.     }
  28.  
  29.  
  30.  
  31.     $x = mysql_query("select * from (select * from fblike order by id desc limit 0,14000) AS soisecoxd order by hits desc limit $desde,$hasta");
  32.  
  33.  
  34.  
  35.     $nr=0;
  36.  
  37.     while ($y=mysql_fetch_assoc($x)) {
  38.  
  39.         $id=$y['id'];
  40.  
  41.          $like=htmlspecialchars($y['like']);
  42.  
  43.         ?>

& Despues :
Código PHP:
Ver original
  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.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.     $link_totales = 10;
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.     paginar($count,$hasta,$pag,$link_totales,$extra_variables);
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.     ?>

Espero que sirva esta info para que entiendas un poquito más..

@unexes Gracias por la respuesta, lo voy a tener en cuenta.

Salu2
  #7 (permalink)  
Antiguo 24/06/2012, 15:46
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Duda con paginador..

Sin ofender pero tu código deja mucho que desear, en todo caso es mejor usar algo así...

Código PHP:
Ver original
  1. $query = mysql_query('select count(*) from fblike');
  2. //supondré que los resultados vienen en un array, ya sea de DB o de lo que fuere...
  3. $numTotalItems = mysql_result($query,0);
  4.  
  5. //numero de items mostrados por página...
  6. $numPerPage = 15;
  7.  
  8. //Obtenemos el numero total de páginas, como es una división probablemente obtengamos un
  9. //una fracción, por lo tanto hay que redondear el numero hacia arriba...
  10. $totalPages = ceil($numTotalItems / $numPerPage);
  11.  
  12. //verificamos en que página estamos
  13. $currentPage = (isset($_GET['page'])) ? $_GET['page'] : 1;
  14.  
  15. $itemsInicio = $numPerPage * ($currentPage - 1);
  16. $queryItems = mysql_query('select * from fblikes order by hits desc limit '.$itemsInicio.','.$numPerPage);
  17.  
  18. while($row = mysql_fetch_assoc($queryItems)) {
  19.      //lo que sea que hagas...
  20. }
  21.  
  22. //verificamos si es la primera página o no
  23. if ($currentPage > 1) {
  24.      echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.($currentPage - 1).'">Anterior</a>';
  25. }
  26.  
  27. //recorremos las página existentes
  28. for($i=0; $i<=$totalPages; $i++) {
  29.      //verificamos si la página dentro del for es igual o no a la página actual
  30.      if ($i != $currentPage) {
  31.           //si no lo es imprimimos el link
  32.           echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i.'</a>';
  33.      }else {
  34.           //si es igual la destacamos como negrita y no agregamos el link
  35.           echo '<strong>'.$i.'</strong>';
  36.      }
  37. }
  38.  
  39. //vemos si la página actual es menor al total de páginas
  40. if ($currentPage < $totalPages) {
  41.      echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.($currentPage + 1).'">Siguiente</a>';
  42. }
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Etiquetas: variables
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 07:43.