Foros del Web » Programando para Internet » PHP »

Paginador php inteligente

Estas en el tema de Paginador php inteligente en el foro de PHP en Foros del Web. Buenas.. jaja, la verdad no se cómo se llama, pero lo que pretendo hacer es un paginador como el que tenemos en el foro, o ...
  #1 (permalink)  
Antiguo 24/10/2014, 10:24
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Paginador php inteligente

Buenas.. jaja, la verdad no se cómo se llama, pero lo que pretendo hacer es un paginador como el que tenemos en el foro, o bien como existen en otras Web.

De por sí, ya hice varios, el problema es cuando tienes unas 150 páginas con 20 resultados en cada una... no puedo hacer que aparezcan numeradas del 1 al 150 y que aparezcan todas.

Me gustaría que solo aparezcan de a 10, algo asi...

<< < | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 ... > >>

y que cuando esté en la pagina 8 vayan apareciendo las siguientes

<< <... | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 ... > >>

<< <... | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 ... > >>

Alguien podría indicarme un tuto ya que no se cómo buscarlo por si tiene un nombre específico para hacer esto, es muy similar al que usamos en el foro.

Gracias desde ya
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #2 (permalink)  
Antiguo 24/10/2014, 11:11
 
Fecha de Ingreso: diciembre-2010
Ubicación: Asunción
Mensajes: 41
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: Paginador php inteligente

Este codigo use hace algun tiempo....

Código PHP:
<?php
    
if(isset($_GET["page"])) {
    
$page$_GET["page"];
    } else {
        
//Si no digo q es la 1ra pagina
        
$page=1;
    }
    
$sql_cat9 "SELECT * FROM marcas WHERE cat_producto = ".$_GET["id"];
    
$que_cat9 mysql_query($sql_cat9);
    
$num_cat9 mysql_num_rows($que_cat9);
    
//------------
    //PAGINACION
    //------------
    //Registros por pagina
    
$per_page 9;
    
//Calculo de la ultima pagina
    
$lastpageceil($num_cat9 $per_page);
    
//Se compruebo que el valor de la pagina sea correcto y si es la ultima pagina
    
$page=(int)$page;
    if(
$page $lastpage) {
        
$page$lastpage;
    } 
    if(
$page 1) {
        
$page=1;
    }

    
//Sentencia LIMIT para añadir a la consulta definitiva
    
$limit" LIMIT ".($page -1)*$per_page.",".$per_page;
    
//Consulta final
    
$sql .= $limit;
    
$que mysql_query($sql);

    if(!
$que) {
        
//SI FALLA LA CONSULTA MUESTRO ERROR
        
die('Error de Consulta:'.mysql_error());
    } else {
    
    while (
$row_cat9 mysql_fetch_assoc($que_cat9)) {
        
$id_cat9[] = $row_cat9["id"];
    }
    
    for (
$a=0;$a<$num_cat9;$a++) {
        
$sql_prod9 "SELECT * FROM productos WHERE marca = ".$id_cat9[$a]." ORDER BY id DESC";
        
//echo $sql_prod;
        
$que_prod9 mysql_query($sql_prod9);
        while (
$row_prod9 mysql_fetch_assoc($que_prod9)) { ?>
        <div class="block">
                <div class="wrapimg"><img width="184" height="139" alt="" src="images/<?=$row_prod9["img_frontal"]?>"></div>
                <h3><a href="producto.php?prod=<?=$row_prod9["id"]?>"><?=$row_prod9["nombre"]?></a></h3>
                <div class="btns-holder">
                    <a class="detail" href="producto.php?prod=<?=$row_prod9["id"]?>">Detalles</a>
                </div>
        </div>
    <?php ?>
            
<?php ?>
</div> 
<?php
//Mostramos bloque de paginación
if($num_cat9 != 0){
    
$nextpage$page +1;
    
$prevpage$page -1;
?>
<div align="center">
<?php
//Si es la primera pagina deshabilito el boton de previous, 
//muestro el 1 como activo y muestro el resto de páginas
    
if ($page == 1){
?>
        &laquo; Anterior 1
<?php
    
for($i$page+1$i<= $lastpage $i++){?>
        <a href="catproducto.php?page=<?php echo $i;?>"><?php echo $i;?></a>
<?php }
//Y si la ultima página es mayor que la actual muestro el boton next o lo deshabilito
    
if($lastpage >$page ){?>
        <a href="catproducto.php?page=<?php echo $nextpage;?>">Siguiente &raquo;</a>
<?php } else {?>
        Siguiente &raquo;
<?php }
    } else {
//En cambio si no estamos en la pagina 1, habilito el boton de previus y muestro las demas
?>
        <a href="catproducto.php?page=<?php echo $prevpage;?>">&laquo; Anterior</a>
<?php
    
for($i1$i<= $lastpage $i++){
    
//Compruebo si es la página activa o no
        
if($page == $i){
?>
        <?php echo $i;?>
<?php 
} else { ?>
        <a href="catproducto.php?page=<?php echo $i;?>" ><?php echo $i;?></a>
<?php }
    }
//Y si no es la ultima pagina activo el boton next
    
if($lastpage >$page ){
?>
        <a href="catproducto.php?page=<?php echo $nextpage;?>">Siguiente &raquo;</a>
<?php } else { ?>
        Siguiente &raquo;
<?php }
    }    
?>
</div>
<?php }
?>
  #3 (permalink)  
Antiguo 24/10/2014, 11:12
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Paginador php inteligente

Ñamañamita.. Gracias.
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #4 (permalink)  
Antiguo 24/10/2014, 12:49
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Paginador php inteligente

Yo lo hago más fácil aún... el problema es que si tengo 100 resultados, los divido de a 10 y obtendré 10 paginas, por ende tendría 10 botones, que sin problemas se puede mostrar ¿Cierto? ok.. y si tengo 15.000 resultados? y los divido de a 20.. tendría 750 páginas... no puedo mostrar 750 botones... por eso puse el ejemplo.. necesito mostrar los botones de a 10 por lo menos.. fijense en el paginador del foro como es... un paginador para mi es mas sencillo

Código PHP:
<?php

if (isset($_GET["page"])) { $page $_GET["page"]; } else { $page=1; };
$start_from = ($page-1) * 50;

$sql="SELECT * FROM empresas_registradas ORDER BY id_empresa ASC LIMIT $start_from, 35";

?>

<div id="pagination">
                                    <ul class="pagination pagination-sm">
                                         
                                    <?php
                                     
if(isset($_GET["emp"])){ 
                                     
                                     
?>
                                        <li><a href="#"><?php echo $num_emp ?> Resultados</a></li>
                                     <?php
                                     
                                     
}else{
                                        
$sql_result "SELECT COUNT(id_empresa) FROM empresas_registradas";
                                        
$result=mysql_query($sql_result,$conn);
                                        
$row mysql_fetch_array($result);
                                        
$total_records $row[0];
                                        
$total_pages ceil($total_records 35);
                                         
                                        for (
$i=1$i<=$total_pages$i++) {
                                        echo 
"<li><a href='?page=".$i."'";
                                        if(
$page==$i)
                                        {
                                        echo 
"id=active";
                                        }
                                        echo 
">";
                                        echo 
"".$i."</a></li> ";
                                        };
                                    
                                    
                                     }
                                    
?>
                                    </ul>
                               </div>
pero lo que quiero es mostrar como ya expliqué, solo que no encuentro con qué hacerlo o como hacerlo...

Inicial
<< < | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 ... > >>

cuando presione en la pagina 10 que me muestre mas botones si hay
<< <... | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 ... > >>


si presione en el 45, que me muestre solo los 10 siguientes
<< <... | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 ... > >>

espero se entienda.. mi código pagina perfecto, pero no se como hacer esto que necesito.. tengo cerca de 20mil registros y necesito paginarlo ahorrando espacio. No quiero llenar mi pagina con 2mil botones todos amontonados. No incito a que lo hagan, pero esas páginas tipo XXX redtube y demas paginan 500 paginas y abrevian y van mostrando botones de a 10, por ejemplo.. el del FOROS del Web tambien lo hace.
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #5 (permalink)  
Antiguo 24/10/2014, 14:06
 
Fecha de Ingreso: diciembre-2010
Ubicación: Asunción
Mensajes: 41
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: Paginador php inteligente

Esto puede servirte de base...

Código PHP:
/******************************************************/
/* Funcion paginar
 * actual:          Pagina actual
 * total:           Total de registros
 * por_pagina:      Registros por pagina
 * enlace:          Texto del enlace
 * maxpags:         El máximo de páginas a presentar simultáneamente (opcional)
 * Devuelve un texto que representa la paginacion
 */
function paginar($actual$total$por_pagina$enlace$maxpags=0) {
  
$total_paginas ceil($total/$por_pagina);
  
$anterior $actual 1;
  
$posterior $actual 1;
  
$minimo $maxpags max(1$actual-ceil($maxpags/2)): 1;
  
$maximo $maxpags min($total_paginas$actual+floor($maxpags/2)): $total_paginas;
  if (
$actual>1)
    
$texto "<a href=\"".$enlace."&pagina=$anterior\" class=\"enlaces\">&laquo; Anterior</a> ";
  else
    
$texto "<b>&laquo; Anterior</b> ";
  if (
$minimo!=1$texto.= "... ";
  for (
$i=$minimo$i<$actual$i++)
    
$texto .= "<a href=\"".$enlace."&pagina=$i\" class=\"enlaces\">$i</a> ";
  
$texto .= "<b>$actual</b> ";
  for (
$i=$actual+1$i<=$maximo$i++)
    
$texto .= "<a href=\"".$enlace."&pagina=$i\" class=\"enlaces\">$i</a> ";
  if (
$maximo!=$total_paginas$texto.= "... ";
  if (
$actual<$total_paginas)
    
$texto .= "<a href=\"".$enlace."&pagina=$posterior\" class=\"enlaces\">Siguiente &raquo;</a>";
  else
    
$texto .= "<b>Siguiente &raquo;</b>";
  return 
$texto;
}

?> 
En tu html puedes poner:
Código HTML:
Ver original
  1. <div align="center"><small>Pagina</small><? echo "$pagina";?> &nbsp;&nbsp;&nbsp;&nbsp;<small>
  2. <? echo paginar($pagina, $total_registros, $registros, $enlace."c=$c&o=$o", $maxpags=20); ?></small></div>

Etiquetas: inteligente, paginador
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 17:34.