Foros del Web » Programando para Internet » PHP »

Paginación php

Estas en el tema de Paginación php en el foro de PHP en Foros del Web. Hola, tengo una duda con mi codigo de paginación y espero que puedan ayudarme. Lo que quiero es que solo se muestren tres botones de ...
  #1 (permalink)  
Antiguo 21/10/2014, 09:19
 
Fecha de Ingreso: julio-2014
Mensajes: 20
Antigüedad: 10 años, 4 meses
Puntos: 0
Paginación php

Hola, tengo una duda con mi codigo de paginación y espero que puedan ayudarme.
Lo que quiero es que solo se muestren tres botones de pagina a cada lado de la pagina actual en la que se esta, y no muestre todos los botones de todas las paginas, el codigo es este:
Código PHP:
<?php
  
/*
    Place code to connect to your DB here.
  */
 

  
$tbl_name="softwares";   //your table name
  // How many adjacent pages should be shown on each side?
  
$adjacents 3;
  
  
/* 
     First get total number of rows in data table. 
     If you have a WHERE clause in your query, make sure you mirror it here.
  */
  
$query "SELECT COUNT(*) as num FROM $tbl_name WHERE catid=$bid";
  
$total_pages mysql_fetch_array(mysql_query($query));
  
$total_pages $total_pages['num'];
  
  
/* Setup vars for query. */
  
$targetpage "browse.php";   //your file name  (the name of this file)
  
$limit 22;                 //how many items to show per page
  
  
if($page
    
$start = ($page 1) * $limit;      //first item to display on this page
  
else
    
header('location:index.php');              //if no page var is given, set start to 1
  
  /* Get data. */
  
$sql "SELECT * FROM $tbl_name WHERE catid=$bid  ORDER BY title  LIMIT $start, $limit";
  
$result mysql_query($sql);
  
  
/* Setup page vars for display. */
  
if ($page == 0$page 1;          //if no page var is given, default to 1.
  
$prev $page 1;              //previous page is page - 1
  
$next $page 1;              //next page is page + 1
  
$lastpage ceil($total_pages/$limit);    //lastpage is = total pages / items per page, rounded up.
  
$lpm1 $lastpage 1;            //last page minus 1
  
  /* 
    Now we apply our rules and draw the pagination object. 
    We're actually saving the code to a variable in case we want to draw it more than once.
  */
  
$queryseo="SELECT * FROM seourls WHERE id = 1"
$resultseo=mysql_query($queryseo);
while (
$row=mysql_fetch_array($resultseo)) {
  
# code...
  
$seourls=$row['status'];
}
if(
$seourls==0){  

  
$pagination "";
  if(
$lastpage 1)
  { 
    
$pagination .= "<div class=\"button-group\">";
    
//previous button
    
if ($page 1
      
$pagination.= "<a class=\"button green fastbutton\"  href=\"$targetpage?page=$prev&bid=$bid&cat=$cat\">Página anterior</a>";
    else
      
$pagination.= "<span  class=\" button green button-dark fastbutton\">Página anterior</span>"
    
    
//pages 
    
if ($lastpage + ($adjacents 2)) //not enough pages to bother breaking it up
    

      for (
$counter 1$counter <= $lastpage$counter++)
      {
        if (
$counter == $page)
          
$pagination.= "<span class=\"button fastbutton blue current\">$counter</span>";
        else
          
$pagination.= "<a class=\"button green fastbutton\" href=\"$targetpage?page=$counter&bid=$bid&cat=$cat\">$counter</a>";         
      }
    }
    elseif(
$lastpage + ($adjacents 2))  //enough pages to hide some
    
{
      
//close to beginning; only hide later pages
      
if($page + ($adjacents 2))    
      {
        for (
$counter 1$counter + ($adjacents 2); $counter++)
        {
          if (
$counter == $page)
            
$pagination.= "<span class=\"button green \">$counter</span>";
          else
            
$pagination.= "<a class=\"button green\" href=\"$targetpage?page=$counter&bid=$bid&cat=$cat\">$counter</a>";         
        }
        
$pagination.= "...";
        
$pagination.= "<a class=\"button green fastbutton\" href=\"$targetpage?page=$lpm1&bid=$bid&cat=$cat\">$lpm1</a>";
        
$pagination.= "<a class=\"button green fastbutton\" href=\"$targetpage?page=$lastpage&bid=$bid&cat=$cat\">$lastpage</a>";   
      }
      
//in middle; hide some front and some back
      
elseif($lastpage - ($adjacents 2) > $page && $page > ($adjacents 2))
      {
        
$pagination.= "<a class=\"button green fastbutton\" href=\"$targetpage?page=1&bid=$bid&cat=$cat\">1</a>";
        
$pagination.= "<a class=\"button green fastbutton\" href=\"$targetpage?page=2&bid=$bid&cat=$cat\">2</a>";
        
$pagination.= "...";
        for (
$counter $page $adjacents$counter <= $page $adjacents$counter++)
        {
          if (
$counter == $page)
            
$pagination.= "<span class=\"button fastbutton blue current\">$counter</span>";
          else
            
$pagination.= "<a class=\"button fastbutton\" href=\"$targetpage?page=$counter&bid=$bid&cat=$cat\">$counter</a>";         
        }
        
$pagination.= "...";
        
$pagination.= "<a class=\"button green fastbutton\" href=\"$targetpage?page=$lpm1&bid=$bid&cat=$cat\">$lpm1</a>";
        
$pagination.= "<a class=\"button green fastbutton\" href=\"$targetpage?page=$lastpage&bid=$bid&cat=$cat\">$lastpage</a>";   
      }
      
//close to end; only hide early pages
      
else
      {
        
$pagination.= "<a class=\"button green fastbutton\" href=\"$targetpage?page=1&bid=$bid&cat=$cat\">1</a>";
        
$pagination.= "<a class=\"button green fastbutton\" href=\"$targetpage?page=2&bid=$bid&cat=$cat\">2</a>";
        
$pagination.= "...";
        for (
$counter $lastpage - (+ ($adjacents 2)); $counter <= $lastpage$counter++)
        {
          if (
$counter == $page)
            
$pagination.= "<span class=\"button fastbutton blue current\">$counter</span>";
          else
            
$pagination.= "<a class=\"button green fastbutton\" href=\"$targetpage?page=$counter&bid=$bid&cat=$cat\">$counter</a>";         
        }
      }
    }
    
    
//next button
    
if ($page $counter 1
      
$pagination.= "<a class=\"button green\" href=\"$targetpage?page=$next&bid=$bid&cat=$cat\">Página siguiente</a>";
    else
      
$pagination.= "<span class=\"button green\">Página siguiente</span>";
    
$pagination.= "</div>\n";   
  }
}else{
// seo urls////////////////////////////////////////////////////////////////////////////////////////

function create_slug($string){
   
$cat=preg_replace('/[^A-Za-z0-9-]+/''-'$string);
   return 
$cat;
}
$cat=create_slug($cat);

          
$pagination "";
  if(
$lastpage 1)
  { 
    
$pagination .= "<div class=\"button-group\">";
    
//previous button
    
if ($page 1
      
$pagination.= "<a class=\"button green fastbutton\"  href=\"$baseUrl/$prev/$bid/$cat\">Página anterior</a>";
    else
      
$pagination.= "<span  class=\" button green button-dark fastbutton\">Página anterior</span>"
    
    
//pages 
    
if ($lastpage + ($adjacents 2)) //not enough pages to bother breaking it up
    

      for (
$counter 1$counter <= $lastpage$counter++)
      {
        if (
$counter == $page)
          
$pagination.= "<span class=\"button fastbutton blue current\">$counter</span>";
        else
          
$pagination.= "<a class=\"button green fastbutton\" href=\"$baseUrl/$counter/$bid/$cat\">$counter</a>";         
      }
    }
    elseif(
$lastpage + ($adjacents 2))  //enough pages to hide some
    
{
      
//close to beginning; only hide later pages
      
if($page + ($adjacents 2))    
      {
        for (
$counter 1$counter + ($adjacents 2); $counter++)
        {
          if (
$counter == $page)
            
$pagination.= "<span class=\"button green \">$counter</span>";
          else
            
$pagination.= "<a class=\"button green\" href=\"$baseUrl/$counter/$bid/$cat\">$counter</a>";         
        }
        
$pagination.= "...";
        
$pagination.= "<a class=\"button green fastbutton\" href=\"$baseUrl/$lpm1/$bid/$cat\">$lpm1</a>";
        
$pagination.= "<a class=\"button green fastbutton\" href=\"$baseUrl/$lastpage/$bid/$cat\">$lastpage</a>";   
      }
      
//in middle; hide some front and some back
      
elseif($lastpage - ($adjacents 2) > $page && $page > ($adjacents 2))
      {
        
$pagination.= "<a class=\"button green fastbutton\" href=\"$baseUrl/1/$bid/$cat\">1</a>";
        
$pagination.= "<a class=\"button green fastbutton\" href=\"$baseUrl/2/$bid/$cat\">2</a>";
        
$pagination.= "...";
        for (
$counter $page $adjacents$counter <= $page $adjacents$counter++)
        {
          if (
$counter == $page)
            
$pagination.= "<span class=\"button fastbutton blue current\">$counter</span>";
          else
            
$pagination.= "<a class=\"button fastbutton\" href=\"$baseUrl/$counter/$bid/$cat\">$counter</a>";         
        }
        
$pagination.= "...";
        
$pagination.= "<a class=\"button green fastbutton\" href=\"$baseUrl/$lpm1/$bid/$cat\">$lpm1</a>";
        
$pagination.= "<a class=\"button green fastbutton\" href=\"$baseUrl/$lastpage/$bid/$cat\">$lastpage</a>";   
      }
      
//close to end; only hide early pages
      
else
      {
        
$pagination.= "<a class=\"button green fastbutton\" href=\"$baseUrl/1/$bid/$cat\">1</a>";
        
$pagination.= "<a class=\"button green fastbutton\" href=\"$baseUrl/2/$bid/$cat\">2</a>";
        
$pagination.= "...";
        for (
$counter $lastpage - (+ ($adjacents 2)); $counter <= $lastpage$counter++)
        {
          if (
$counter == $page)
            
$pagination.= "<span class=\"button fastbutton blue current\">$counter</span>";
          else
            
$pagination.= "<a class=\"button green fastbutton\" href=\"$baseUrl/$counter/$bid/$cat\">$counter</a>";         
        }
      }
    }
    
    
//next button
    
if ($page $counter 1
      
$pagination.= "<a class=\"button green\" href=\"$baseUrl/$next/$bid/$cat\">Página siguiente</a>";
    else
      
$pagination.= "<span class=\"button green\">Página siguiente</span>";
    
$pagination.= "</div>\n";   
  }

}
?>
Espero que puedan ayudarme porque no consigo hacerlo, Saludos y gracias de antemano
  #2 (permalink)  
Antiguo 21/10/2014, 10:52
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Paginación php

Me parece muy complicada la tecnica, considera el siguiente ejemplo:
Código PHP:
Ver original
  1. <?php
  2.     // Ejemplo simple de paginación.
  3.     // Esta funcion realiza una paginación generica.
  4.     function paginar($query, $page, $rows)
  5.     {
  6.         // Esto es lo que se va a retornar.
  7.         $respuesta = [
  8.             "cant_resultados" => 0,
  9.             "cant_paginas" => 0,
  10.             "resultados" => []
  11.         ];
  12.        
  13.         // Contar cuantos registros hay.
  14.         $q = explode("FROM", $query, 2);
  15.         $count = "SELECT COUNT(".(strpos($q[0], "DISTINCT") !== false ? "DISTINCT ")."*) cant FROM ".$q[1];
  16.        
  17.         // Ejecutar la query $count y guardar en $respuesta el resultado.
  18.         $respuesta["cant_resultados"] = // El resultado obtenido de la consulta.
  19.        
  20.         // Verificar si hay resultados.
  21.         if($respuesta["cant_resultados"])
  22.         {
  23.             // Saber cuantas paginas hay en total.
  24.             $respuesta["cant_paginas"] = ceil($respuesta["cant_resultados"]/$rows);
  25.            
  26.             $result = $query." LIMIT $rows OFFSET ".(($page-1)*$rows);
  27.            
  28.             // Ejecutar la query $result y guardar en $respuesta el resultado.
  29.             $respuesta["resultados"] = // El resultado obtenido de la consulta.        
  30.         }      
  31.        
  32.         return $respuesta;
  33.     }
  34.        
  35.     // Esta query es la que quieres paginar, puedes poner todo lo que quieras, exepto la clausula LIMIT, esta se generara sola.
  36.     $query = "SELECT field1 f1, field2 f2, field3 f3 FROM table1 t1 WHERE field1 LIKE '%txt%'";
  37.     $page = 1; // La pagina actual a mostrar. Debe ser >= 1.
  38.     $rows = 20; // Cantidad de resultados por pagina. Debe ser >= 1.
  39.    
  40.     $respuesta = paginar($query, $page, $rows);
  41.    
  42.     echo "Cantidad de registros:<br> ";
  43.     var_dump($respuesta["cant_resultados"]);
  44.     echo "Cantidad de paginas:<br> ";
  45.     var_dump($respuesta["cant_paginas"]);
  46.     echo "Registros por pagina:<br> ";
  47.     var_dump($rows);
  48.     echo "Pagina actual:<br> ";
  49.     var_dump($page);
  50.     echo "Contexto:<br> ";
  51.     for($nro = $page-4; $nro < $page+4; $nro++)
  52.     {
  53.         if($nro>0 && $nro<$respuesta["cant_paginas"])
  54.         {
  55.             if($nro == $page)
  56.                 echo "<b>"$nro."</b><br>";
  57.             else
  58.                 echo $nro."<br>";
  59.         }
  60.     }
  61.     echo "Registros:<br> ";
  62.     var_dump($respuesta["resultados"]);

Sirve para paginar cualquier consulta que quieras y es facil de usar, la funcion puedes ponerla en un archivo aparte y luego solo hacer la segunda parte.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #3 (permalink)  
Antiguo 21/10/2014, 11:07
 
Fecha de Ingreso: julio-2014
Mensajes: 20
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Paginación php

el sistema que he puesto ya cuenta con lo de el limite de botones pero no funciona no se porque, es la variable
Código PHP:
Ver original
  1. // How many adjacent pages should be shown on each side?
  2.   $adjacents = 3;
  #4 (permalink)  
Antiguo 21/10/2014, 11:27
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Paginación php

El sistema que has puesto hace muy compleja una tarea muy simple y ademas no es reutilizable, es engorroso, por eso te propuse otra alternativa, cuando tienes cosas así suele ser mas fácil reemplazarlas que arreglarlas.

Vi el mismo codigo en stackoverflow si lo copiaste y pegaste de alli, seria bueno que al menos entiendas que es lo que te estabas copiando.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #5 (permalink)  
Antiguo 21/10/2014, 11:32
 
Fecha de Ingreso: julio-2014
Mensajes: 20
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Paginación php

No es de alli, lo traia un script, lo añadiría el autor. La pena es que ya no da soporte. Probare con ese sistema aunque si se pudiera arreglar el actual de una forma facil, funciona a la perfección. Gracias por tu ayuda NSD!
  #6 (permalink)  
Antiguo 23/10/2014, 08:16
 
Fecha de Ingreso: julio-2014
Mensajes: 20
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Paginación php

No consigo hacerlo funcionar de la misma manera que trabaja el otro, si alguien pudiera decirme como limito el numero de botones mostrado, estaria muy agradecido.

Etiquetas: mysql, select, sql, variable
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 22:27.