Foros del Web » Programando para Internet » PHP »

Problemilla con paginacion en php

Estas en el tema de Problemilla con paginacion en php en el foro de PHP en Foros del Web. Buenas tengo un problema a la hora de paginar , la paginación me funciona perfectamente pero el problema viene cuando se juntan 50 paginas o ...
  #1 (permalink)  
Antiguo 26/05/2009, 02:26
 
Fecha de Ingreso: marzo-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 1
Pregunta Problemilla con paginacion en php

Buenas tengo un problema a la hora de paginar , la paginación me funciona perfectamente pero el problema viene cuando se juntan 50 paginas o mas que queda bastante mal y desorganizado, y lo que quería era hacer algo parecido a esto
1 2 3 4 5 ... > >>

<< < ... 10 11 12 13 14 ... > >>

<< < ... 46 47 48 49 50

estando en negrita la pagina en la que estoy ,pero no lo consigo, no hay forma.
Si alguien se anima a echarme una mano.
Os dejo el codigo que tengo actualmente:

Código PHP:
<?php
//Limito los resultados
$TAMANO_PAGINA 15;

//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;
}
?>
Código PHP:
<?php
//Paginacion
echo "<center>";
        if (
$total_paginas 1)
        {
        
$pagina_anterior=$_GET['pagina']-1;
        
$pagina_siguiente=$_GET['pagina']+1;
        
        echo 
"<b><font color='#FFFFFF' size='-1'><a href='index.php?pagina=1></b> << </a></font>&nbsp;&nbsp;&nbsp;";
        echo 
"<b><font color='#FFFFFF' size='-1'><a href='index.php?pagina=".$pagina_anterior."></b> < </a></font>&nbsp;&nbsp;&nbsp;";
             
            for (
$i=1;$i<=$total_paginas;$i++)
             {
                   if (
$pagina == $i)
                  echo 
"<b><font size='+1' color='black'>".$pagina "</font></b> &nbsp;&nbsp;";
                  else
                  echo 
"<b><font color='#FFFFFF' size='-1'><a href='index.php?pagina="$i ."&id_cliente=".$id_cliente."></b>"$i ."</a></font>&nbsp;&nbsp;&nbsp;";
             }
            
        echo 
"<b><font color='#FFFFFF' size='-1'><a href='index.php?pagina=".$pagina_siguiente."></b> > </a></font>&nbsp;&nbsp;&nbsp;";
        echo 
"<b><font color='#FFFFFF' size='-1'><a href='index.php?pagina=".$total_paginas."></b> >> </a></font>&nbsp;&nbsp;&nbsp;";
        
        }
        echo 
"</center>";
  #2 (permalink)  
Antiguo 26/05/2009, 05:06
 
Fecha de Ingreso: marzo-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Problemilla con paginacion en php

Al final me he dado por vencido jeje, y lo he hecho con phppaging.Os lo recomiendo para paginar resultados, es muy fácil de implementar y muy completo.
Un saludo.
  #3 (permalink)  
Antiguo 26/05/2009, 07:27
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Problemilla con paginacion en php

Te voy a dar mejor el codigo que yo uso para paginacion espero que te ayude

Código PHP:
<?php
class paginationClass{
    var 
$page_num 1;
    var 
$page_pagination;
    var 
$r_comment;
    var 
$row_num;
    var 
$numofpages;
    var 
$range_min;
    var 
$range_max
    var 
$page_min
    var 
$page_max

    var 
$range;
    var 
$rowsPerPage;
    var 
$s_comment;
    var 
$s_comment_n;
    
    function 
paginationClass($r$rPP$sc$scn){
        
$this->range $r;
        
$this->rowsPerPage $rPP;
        
$this->s_comment $sc;
        
$this->s_comment_n $scn;
    }

    private function 
setComment(){
        
$this->page_num = (empty($this->page) ? $this->page_num $this->page);
        
$offset = ($this->page_num 1) * $this->rowsPerPage;
        
$this->s_comment $this->s_comment " LIMIT $offset, " $this->rowsPerPage;
        
$this->r_comment mysql_query($this->s_comment) or die(mysql_error());
        
$r_comment_n mysql_query($this->s_comment_n) or die(mysql_error());
        
$this->row_num mysql_num_rows($r_comment_n);
    }

    private function 
setValues(){
        
$this->numofpages ceil($this->row_num/$this->rowsPerPage);
        if(
$this->numofpages 1){
            
$this->range_min = ($this->range == 0) ? ($this->range 2) -: ($this->range 1) / 2;
            
$this->range_max = ($this->range == 0) ? $this->range_min $this->range_min
            
$this->page_min $this->page_num $this->range_min
            
$this->page_max $this->page_num $this->range_max

            
$this->page_min = ($this->page_min 1) ? $this->page_min
            
$this->page_max = ($this->page_max < ($this->page_min $rthis->ange 1)) ? $this->page_min $this->range $this->page_max
            if (
$this->page_max $this->numofpages){ 
                
$this->page_min = ($this->page_min 1) ? $this->numofpages $this->range 1
                
$this->page_max $this->numofpages
            }
            
$this->page_min = ($this->page_min 1) ? $this->page_min
        }
    }

    private function 
setPagePagination(){
        
$self $_SERVER["PHP_SELF"];
        if(
$this->numofpages 1){
            
$setPP "<div>";

            
//[ « ]
            
if (($this->page_num > ($this->range $this->range_min)) && ($this->numofpages $this->range)){ 
                
$setPP .= "[ <a title='First' href='".$self."?page=1' class='title'><b>&laquo;</b></a> ]\n"
            }

            
// [ Previous # ]
            
if ($this->page_num != 1) { 
                
$setPP .= "[ <a title='First' href='".$self."?page=".($this->page_num-1)."' class='title'><b>Anteriores " $this->rowsPerPage "</b></a> ]\n"
            } 

            
// ...
            
if (($this->page_num > ($this->range $this->range_min)) && ($this->numofpages $this->range)){ 
                
$setPP .= " <b>...</b> "
            }

            
// [ # ]
            
for ($i $this->page_min$i <= $this->page_max$i++) { 
                if (
$i == $this->page_num
                    
$setPP .= "[ <b><font color=red>" $i "</font></b> ]\n"
                else 
                    
$setPP .= "[ <a href='" .$self"?page=" .$i"' class='title'>".$i."</a> ]\n"
            } 

            
// ...
            
if (($this->page_num< ($this->numofpages $this->range_max)) && ($this->numofpages $this->range)) { 
                
$setPP .= " <b>...</b> "
            }

            
//[ Next # ]
            
if ($this->page_num $this->numofpages) { 
                
$setPP .= "[ <a href='".$self."?page=".($this->page_num 1) . "' class='title'><b>Siguientes " $this->rowsPerPage "</b></a> ]\n"
            } 

            
//[ » ]
            
if (($this->page_num< ($this->numofpages $this->range_max)) && ($this->numofpages $this->range)) { 
                
$setPP .= "[ <a title='Last Info' href='".$self."?page=".$this->numofpages"' class='title'><b>&raquo;</b></a> ]\n"
            }

            
$setPP .= "</div>";

            
$this->page_pagination $setPP;
        }
    }

    function 
getPagePagination(){
        
$this->setComment();
        
$this->setValues();
        
$this->setPagePagination();
        return array(
'r_comment' => $this->r_comment
            
'row_num' => $this->row_num
            
'page_pagination' => $this->page_pagination); 
    }
}

function 
pagination($r$rPP$sc$scn){ 
    
$p = new paginationClass($r$rPP$sc$scn); 
    
$p->page $_REQUEST["page"];
    foreach(
$p->getPagePagination() as $k => $v){ 
        if(
trim($v)){ 
            global $
$k
            $
$k $v
        } 
    } 

?>
Para Usarlo debes llamar la funcion de esta forma

Código PHP:
$sql_que_quiero_verificar "SELECT * FROM TABLA";

$sql_que_verificara_numero_de_lineas "SELECT * FROM TABLA";


/*
El primero es para que me muestre el rango que quiero mostrar
El segundo es para que me muestre cuantos "Rows" quiero que muestre
El tercero es mi sql principal
El cuarto es para ver cuantos "Rows" tiene la tabla seleccionada
*/
pagination(1010$sql_que_quiero_verificar$sql_que_verificara_numero_de_lineas);

while(
$row mysql_fetch_assoc($r_comment)){
  
//codigo que quieras usar
  
echo $page_pagination;


Espero te sea útil

Última edición por abimaelrc; 11/06/2009 a las 18:30
  #4 (permalink)  
Antiguo 26/05/2009, 08:31
 
Fecha de Ingreso: marzo-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 1
De acuerdo Respuesta: Problemilla con paginacion en php

Gracias por tu ayuda, te lo has trabajado mucho.
Un saludo.
  #5 (permalink)  
Antiguo 11/06/2009, 17:16
 
Fecha de Ingreso: mayo-2009
Mensajes: 81
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Problemilla con paginacion en php

una pregunta para ponerle el limite que quieres que te salgan???
  #6 (permalink)  
Antiguo 11/06/2009, 17:20
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Problemilla con paginacion en php

se usa el primer parametro de la funcion

Código PHP:
/* 
El primero es para que me muestre el rango que quiero mostrar 
El segundo es para que me muestre cuantos "Rows" quiero que muestre 
El tercero es mi sql principal 
El cuarto es para ver cuantos "Rows" tiene la tabla seleccionada 
*/ 
  #7 (permalink)  
Antiguo 11/06/2009, 17:23
 
Fecha de Ingreso: mayo-2009
Mensajes: 81
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Problemilla con paginacion en php

me quedo igual
  #8 (permalink)  
Antiguo 11/06/2009, 17:29
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Problemilla con paginacion en php

trata cambiando los numeros en diferentes cantidades tanto el primero como el segundo para que veas lo que quieres exactamente y me dejas saber
  #9 (permalink)  
Antiguo 11/06/2009, 17:38
 
Fecha de Ingreso: mayo-2009
Mensajes: 81
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Problemilla con paginacion en php

estoy provando :

Cita:

Cita:


$registros = 5;

if (!$pagina) {
$inicio = 0;
$pagina = 1;
}
else {
$inicio = ($pagina - 1) * $registros;
}


$resultados = mysql_query("SELECT * FROM producto WHERE visible = 1");
$total_registros = mysql_num_rows($resultados);
$resultados = mysql_query("SELECT * FROM producto WHERE visible = 1 ORDER BY fecha DESC LIMIT $inicio, $registros");
$total_paginas = ceil($total_registros / $registros);

if($total_registros) {

while($articulo=mysql_fetch_array($resultados)) {

echo "<b>".$articulo["titulo"]."</b><br>";
echo "<font color='#666666'>".$articulo["descripcion"]."</font><br><br><br>";

}

} else {
echo "<font color='darkgray'>(sin resultados)</font>";
}

mysql_free_result($resultados);

if($total_registros) {

echo "<center>";

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

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

if(($pagina + 1)<=$total_paginas) {
echo " <a href='producto.php?pagina=".($pagina+1)."'>Siguien te ></a>";
}

echo "</center>";
error
Cita:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\llegrau\producto.php on line 351
(sin resultados)
Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\llegrau\producto.php on line 368
  #10 (permalink)  
Antiguo 11/06/2009, 17:45
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Problemilla con paginacion en php

escribe en esta linea esto

$resultados = mysql_query("SELECT * FROM producto WHERE visible = 1") or die(mysql_error);

Para ver que problema tienes con la base de datos
  #11 (permalink)  
Antiguo 11/06/2009, 17:49
 
Fecha de Ingreso: mayo-2009
Mensajes: 81
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Problemilla con paginacion en php

mysql_error

jo ja estoy conectada a la base de datos.
  #12 (permalink)  
Antiguo 11/06/2009, 17:52
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Problemilla con paginacion en php

perdon se me olvido escribir los parentesis añadele mysql_error()
  #13 (permalink)  
Antiguo 11/06/2009, 17:54
 
Fecha de Ingreso: mayo-2009
Mensajes: 81
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Problemilla con paginacion en php

Unknown column 'visible' in 'where clause'
  #14 (permalink)  
Antiguo 11/06/2009, 18:03
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Problemilla con paginacion en php

verifica tu base de datos que visible no existe en esa base de datos
  #15 (permalink)  
Antiguo 11/06/2009, 18:17
 
Fecha de Ingreso: mayo-2009
Mensajes: 81
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Problemilla con paginacion en php

lo quiero hacer un paginador de una lista que saco de la base de datos medas alguna idea.

el codigo q gasto del princicpio es este:

$linea="select count(codigo) from producto";
$todo=mysql_query($linea);
$r2=mysql_fetch_row($todo);

$paginas=ceil($r2[0]/$end);

echo "p&aacute;gina [".$pag."] de [".$paginas."]<br>";

if($pag>1)
echo "<a href=\"prodcuto.php?pag=1\">|<<</a> <a href=\"producto.php?pag=".($pag-1)."\"><<</a> | ";

if($pag<$paginas)
echo " | <a href=\"prodcuto.php?pag=".($pag+1)."\">>></a> <a href=\"producto.php?pag=".($paginas)."\">>>|</a>";

mysql_free_result($todo);

pero me da error al darle >> eso?
como ponerle el limite?
  #16 (permalink)  
Antiguo 11/06/2009, 18:32
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Problemilla con paginacion en php

corregi un error que habia en la segunda funcion de lo que habia hecho

function pagination($r, $rPP, $sc, $scn){
$p = new paginationClass($r, $rPP, $sc, $scn);
$p->page = $_REQUEST["page"];
foreach($p->getPagePagination() as $k => $v){
if(trim($v)){
global $$k;
$$k = $v;
}
}
}

Vuelve a usarla y me dejas saber
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 09:58.