Foros del Web » Programando para Internet » PHP »

[Apoerte] Paginacion php+mysql

Estas en el tema de [Apoerte] Paginacion php+mysql en el foro de PHP en Foros del Web. aca dejo una funcion que tengo para paginacion, lo unico que faltaria, que seria bueno si alguien daria una mano es cuando son por ejemplo ...
  #1 (permalink)  
Antiguo 22/01/2009, 05:12
Avatar de aldo1982  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 19 años, 4 meses
Puntos: 6
De acuerdo [Apoerte] Paginacion php+mysql

aca dejo una funcion que tengo para paginacion, lo unico que faltaria, que seria bueno si alguien daria una mano es cuando son por ejemplo 2 mil paginas, para que muestre algo asi 1 2 3 4 5 6 .... 2000

aca va la funcion

Código PHP:
function paginacion3($perPage, &$page, &$from$extraVars$table$sqlWhere$title$idField ""$showPages TRUE) {
    
// OJO: $page y $from se pasa por referencia 
    
    
if (!$page)                { $page 1; }    
    if (
$page 1)        { $page 1; }    
    if (
$title)             { $title $title ": "; }
    if (
$extraVars)     { $extraVars "&" $extraVars; }
    if (!
$idField)         { $idField "id";    }
    
    
$from = ($page 1) * $perPage;
    
    
$sql "SELECT count(DISTINCT $idField) as n_registros FROM $table $sqlWhere";
    
$result mysql_query($sql);
    
    if (
$line mysql_fetch_array($result)) {
        
$cuantos $line[n_registros];
        
$pages ceil($cuantos $perPage);

        if (
$page 1) {
            
$previous "<a href=\"" $_SERVER['PHP_SELF']  . "?page=" . ($page 1
                    . 
"$extraVars\"><b>&lt; Anterior</b></a> | ";
            
$desde $perPage * ($page 1) + 1;
        }else{
            
$desde 1;
        }

        if (
$desde == $cuantos OR $cuantos $perPage $desde) {
            
$hasta $cuantos;
        }else{
            
$next " | <a href=\"" $_SERVER['PHP_SELF']  . "?page=" . ($page 1
                    . 
"$extraVars\"><b>Siguiente &gt;</b></a>";
            
$hasta $perPage $page;
        }

        if (
$pages 0) {
            
$header "<div>$previous$title<b>$desde-$hasta</b> de <b>$cuantos</b>$next</div>";
    
            if (
$showPages) {
                
$intermedias "<div>Paginas: ";
                
                for (
$n 1$n <= $pages$n++){
                    if (
$n == $page){
                        
$intermedias .= "$sep<b>$n</b>";
                    }else{
                        
$intermedias .= "$sep<a href=\"" $_SERVER['PHP_SELF'] . "?page=$n$extraVars\">$n</a>";
                    }
                    
$sep " ";
                }
                
$intermedias .= "</div>";
            }
        }
        
//$page = ($page - 1) * $perPage;
        
    
}
    
    
$header .= $intermedias
    return 
$header;

su uso

Código:
<table width="550"  cellpadding="2" cellspacing="1">    
    
    <?
        $perPage = 10;
        $page = $_GET[page];

       $paging = paginacion2($perPage, $page, $from, "", "Tabla", "", "Descripcion Tabla", "id_principal_tabla");

    mysql_query("SET NAMES utf8");
    $sql = "SELECT campo1, campo2 FROM tabla ORDER BY id DESC                    
                    ";
    $result = mysql_query($sql);
    if ($row = mysql_fetch_array($result)) {
        do {
            ?>
            <tr>
                <td align="center"><?=$row[campo1])?></td>
                <td align="center"><?=$row[campo2])?></td>
            </tr>
            <?
        } while($row = mysql_fetch_array($result));
    } else {
        ?>
        <tr>
            <td colspan="2" id="noRows"><b>No se han encontrado registros</b></td>
        </tr>
        <?
    }
    ?>

</table>
<div id="pages"><?=$paging?></div>
__________________
LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA
  #2 (permalink)  
Antiguo 22/01/2009, 06:48
Avatar de aldo1982  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 19 años, 4 meses
Puntos: 6
De acuerdo Respuesta: [Apoerte] Paginacion php+mysql

hola gente ... alguien podria dar una mano para que la aparcion de las paginas, si tenemos 2000 paginas, no muestre todas, sino que muestre de esta forma

1 2 3 4 5 .... 2000

salu2 y gracias
__________________
LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA
  #3 (permalink)  
Antiguo 22/01/2009, 07:52
 
Fecha de Ingreso: diciembre-2008
Ubicación: Ayacucho and Lima
Mensajes: 10
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: [Apoerte] Paginacion php+mysql

Hola aldo1982 pues tengo un class de lo que buscas haver si te sirbe.

Paginacion php class mas css

Pagination.class.php
Código PHP:
<?php
/*******************************
By Grunst3r - consultas o dudas a [email protected]
y sus ayudas me sirven tambien para proyectos grandes xD
*******************************/
class CSSPagination
{
    private 
$totalrows;
    private 
$rowsperpage;
    private 
$website;
    private 
$page;
    private 
$sql;
        
    public function 
__construct($sql$rowsperpage$website)
    {
        
$this->sql $sql;
        
$this->website $website;
        
$this->rowsperpage $rowsperpage;
    }
    
    public function 
setPage($page)
    {
        if (!
$page) { $this->page=1; } else  { $this->page $page; }
    }
    
    public function 
getLimit()
    {
        return (
$this->page 1) * $this->rowsperpage;
    }
    
    private function 
getTotalRows()
    {
        
$result = @mysql_query($this->sql) or die ("query failed!");    
        
$this->totalrows mysql_num_rows($result);
    }
    
    private function 
getLastPage()
    {
        return 
ceil($this->totalrows $this->rowsperpage);
    }
    
    public function 
showPage()
    {
        
$this->getTotalRows();
        
        
$pagination "";
        
$lpm1 $this->getLastPage() - 1;
        
$page $this->page;
        
$prev $this->page 1;
        
$next $this->page 1;
        
        
$pagination .= "<div class=\"pagination\"";
        if(
$margin || $padding)
        {
            
$pagination .= " style=\"";
            if(
$margin)
                
$pagination .= "margin: $margin;";
            if(
$padding)
                
$pagination .= "padding: $padding;";
            
$pagination .= "\"";
        }
        
$pagination .= ">";
        
        
        
        if (
$this->getLastPage() > 1)
        {
            if (
$page 1
                
$pagination .= "<a href='$this->website?page=$prev' title='Anterior'>« Anterior</a>";
            else
                
$pagination .= "<span class=\"disabled\">« Anterior</span>";
            
            
            if (
$this->getLastPage() < 9)
            {    
                for (
$counter 1$counter <= $this->getLastPage(); $counter++)
                {
                    if (
$counter == $page)
                        
$pagination .= "<span class=\"current\">".$counter."</span>";
                    else
                        
$pagination .= "<a href='$this->website?page=$counter' title='pagina $counter'>".$counter."</a>";                    
                }
            }
            
            elseif(
$this->getLastPage() >= 9)
            {
                if(
$page 4)        
                {
                    for (
$counter 1$counter 6$counter++)
                    {
                        if (
$counter == $page)
                            
$pagination .= "<span class=\"current\">".$counter."</span>";
                        else
                            
$pagination .= "<a href='$this->website?page=$counter' title='pagina $counter'>".$counter."</a>";                    
                    }
                    
$pagination .= "...";
                    
$pagination .= "<a href='$this->website?page=$lpm1' title='pagina $lpm1'>".$lpm1."</a>";
                    
$pagination .= "<a href='$this->website?page=".$this->getLastPage()."' title='pagina ".$this->getLastPage()."'>".$this->getLastPage()."</a>";        
                }
                elseif(
$this->getLastPage() - $page && $page 1)
                {
                    
$pagination .= "<a href='$this->website?page=1' title='pagina 1'>1</a>";
                    
$pagination .= "<a href='$this->website?page=2' title='pagina 2'>2</a>";
                    
$pagination .= "...";
                    for (
$counter $page 1$counter <= $page 1$counter++)
                    {
                        if (
$counter == $page)
                            
$pagination .= "<span class=\"current\">".$counter."</span>";
                        else
                            
$pagination .= "<a href='$this->website?page=$counter' title='pagina $counter'>".$counter."</a>";                    
                    }
                    
$pagination .= "...";
                    
$pagination .= "<a href='$this->website?page=$lpm1' title='pagina $lpm1'>$lpm1</a>";
                    
$pagination .= "<a href='$this->website?page=".$this->getLastPage()."' title='pagina ".$this->getLastPage()."' >".$this->getLastPage()."</a>";        
                }
                else
                {
                    
$pagination .= "<a href='$this->website?page=1' title='pagina 1'>1</a>";
                    
$pagination .= "<a href='$this->website?page=2' title='pagina 2'>2</a>";
                    
$pagination .= "...";
                    for (
$counter $this->getLastPage() - 4$counter <= $this->getLastPage(); $counter++)
                    {
                        if (
$counter == $page)
                            
$pagination .= "<span class=\"current\">".$counter."</span>";
                        else
                            
$pagination .= "<a href='$this->website?page=$counter' title='pagina $counter'>".$counter."</a>";                    
                    }
                }
            }
        
        if (
$page $counter 1
            
$pagination .= "<a href='$this->website?page=$next' title='pagina $counter'>Siguiente »</a>";
        else
            
$pagination .= "<span class=\"disabled\">Siguiente »</span>";            
        }

       
$pagination .= "</div>\n";    
                    
        return 
$pagination;
    }
}
?>
y bueno en tu archivo lo ponemos asi

Código PHP:
<?php
require_once("Pagination.class.php"); 

$sql1 "SELECT * FROM table WHERE whateverfilter ORDER BY id "//  Consulta para mostrar el total de resultados
$rowsperpage 15// mostrar la cantidad de resultados
//$website = "?id=1"; // url de la web para la indexacion esta parte falta mejorar xD
$pagination = new CSSPagination($sql1$rowsperpage$website); // Creando Objetivo
$pagination->setPage($_GET[page]); // la paginacion en GET xD

$sql2 "SELECT * FROM table  WHERE whateverfilter ORDER BY id LIMIT " $pagination->getLimit() . ", " $rowsperpage
$result = @mysql_query($sql2$any_connection_db) or die("<b> No hay Coneccion </b>");
while (
$rows mysql_fetch_array($result))
{
// Aqui el contenido o la lits a de de tu tabla
}

echo 
$pagination->showPage(); // HTML Css mostrar paginacion
?>
y por ultimo el style css para la paginacion
Código HTML:
<style>
div.pagination {
	padding: 3px;
	margin: 3px; font-family:Verdana; font-size:8pt; text-decoration:none
}

div.pagination a {
	margin: 2px;
	border: 1px solid #000000;
	
	text-decoration: none; /* no underline */
	color: #000000;font-family:Verdana; font-size:8pt; padding-left:5px; padding-right:5px; padding-top:2px; padding-bottom:2px
}
div.pagination a:hover, div.pagination a:active {
	margin: 2px;
		border: 1px solid #800000;
		
		background-color: #800000;
		color: #FFFFFF;font-family:Verdana; font-size:8pt; padding-left:5px; padding-right:5px; padding-top:2px; padding-bottom:2px; text-decoration:none
}
div.pagination span.current {
	margin: 2px;
		border: 1px solid #000000;
		
		font-weight: bold;
		background-color: #000000;
		color: #FFFFFF;font-family:Verdana; font-size:8pt; padding-left:5px; padding-right:5px; padding-top:2px; padding-bottom:2px
	}
div.pagination span.disabled {
		margin: 2px;
		border: 1px solid #999999;
	
		color: #999999;font-family:Verdana; font-size:8pt; padding-left:5px; padding-right:5px; padding-top:2px; padding-bottom:2px
	}
	
a:hover.list { font-family: Verdana; font-size: 8pt; font-variant: small-caps; 
               text-decoration: underline; text-transform: capitalize; 
               color: #006699; line-height: 200%; font-weight: bold }
a.list       { text-transform: capitalize; font-variant: small-caps; font-family: Verdana; 
               font-size: 8pt; color: #FF0000; text-decoration: underline; 
               line-height: 200%; font-weight: bold }	
</style> 

Ami me funciona y lo uso en varias maneras xD haver quien laa saka provecho o la mejora seria bueno que alguien lo ague mucho mejor que este code
  #4 (permalink)  
Antiguo 22/01/2009, 08:00
Avatar de FabianSN  
Fecha de Ingreso: enero-2007
Ubicación: SNicolas, BsAs, Argentina
Mensajes: 96
Antigüedad: 17 años, 3 meses
Puntos: 2
Respuesta: [Apoerte] Paginacion php+mysql

Estoy trabajando en eso.
Paciencia.
__________________
Letra de Canciones
  #5 (permalink)  
Antiguo 22/01/2009, 08:05
Avatar de aldo1982  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 19 años, 4 meses
Puntos: 6
De acuerdo

d 10, muchas gracias

grunst3r ahora pruebo la tuya y te digo ke tal me fue... muchas gracias por tu aporte.


salu2
__________________
LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA

Última edición por GatorV; 22/01/2009 a las 09:57
  #6 (permalink)  
Antiguo 22/01/2009, 08:24
 
Fecha de Ingreso: septiembre-2008
Ubicación: Lanzarote, Canarias
Mensajes: 486
Antigüedad: 15 años, 7 meses
Puntos: 41
Respuesta: [Apoerte] Paginacion php+mysql

Yo hice uno como tu kieres... solo que ahora mismo no dispongo de el, de todas formas he visto uno que igual te sirve...

http://www.elefren.com/blog/paginar-...nacion-script/
  #7 (permalink)  
Antiguo 22/01/2009, 09:43
Avatar de FabianSN  
Fecha de Ingreso: enero-2007
Ubicación: SNicolas, BsAs, Argentina
Mensajes: 96
Antigüedad: 17 años, 3 meses
Puntos: 2
Respuesta: [Apoerte] Paginacion php+mysql

Bueno, aqui he hecho algo basandome en tu caso particular.
Para probarlo solo debes cambiar algunos parametros de conexion para especificar la BD y tabla a usar.

Se podría haber hecho en funcion o definiendo clases, pero preferí hacerlo sobre el mismo código para que se entienda mejor el funcionamiento.

Saludos y espero te sirva.

Código PHP:
<table width="550"  cellpadding="2" cellspacing="1">    
    <?
        $cn
=mysql_connect("localhost","root",""); // Depende de la conexion a la BD que tenga cada usuario
        
$db=mysql_select_db("tu_base_de_dato",$cn); // Seleccionar la BD a usar

        
$perPage 10// Filas por pagina
        
$pageplus6//Cuantas paginas mostrar antes de mostrar la página final
        
$Tabla="tabla_a_usar"//Tabla que vas a usar para hacer la consulta

        // Pagina inicial
        
if ($_GET[page]>0) {
            
$page=$_GET[page];
        } else {
            
$page=1;
        }
        
//Calcular el primer valor del parámetro a pasarle a LIMIT
        
$inicio=$perPage*($page-1);

        
//Calcular cantidad de páginas
        
$sql "SELECT count(ID) as cantidad FROM $Tabla"
        
$result mysql_query($sql);
        if (
$row mysql_fetch_array($result)) 
            
$filas=$row[cantidad]; // Total de registros devueltos por la consulta
            
$paginas=ceil($filas/$perPage); // Total de paginas
            
        
        
if ($filas>0) {
            
$sql "SELECT * FROM $Tabla ORDER BY ID LIMIT $inicio,$perPage";
            
$result mysql_query($sql);
            while(
$row mysql_fetch_array($result)) {
                
?>
                <tr>
                    <td align="center"><? echo $row[0?></td>
                    <td align="center"><? echo $row[1?></td>
                </tr>
                <?
            
}
            echo 
"</table>";
            if ((
$page+$pageplus)>$paginas)
                
/* Si la cantidad de páginas que quedan para completar la cantidad de paginas 
                   que se debe mostrar, es menor que dicho parametro reduce la cantidad a mostrar */
                
$pageplus=$paginas-$page
            for(
$n=$page+1;$n<=($page+$pageplus);$n++) {
                echo 
"<a href=\"prueba.php?page=$n\">$n</a>";
                if (
$n+1<=($page+$pageplus)) {
                    
//Coloca el separador (espacio y coma, en este caso)
                    
echo "&nbsp;,";
                } else {
                    if ((
$page+$pageplus)<$paginas) {
                    
// Si el próximo es el final coloca la última página
                    
echo "&nbsp;...&nbsp;<a href=\"prueba.php?page=$paginas\">$paginas</a>"
                    }
                }
            }
            
// Que haya algun link para volver una página hacia atrás
            
if ($page==$paginas)
                echo 
"<a href=\"prueba.php?page=".($page-1)."\">Volver a ".($page-1)."</a>";
            
        } else {
            
?>
            <tr>
                <td colspan="2" id="noRows"><b>No se han encontrado registros</b></td>
            </tr>
            </table>
            <?
        
}
    
?>
__________________
Letra de Canciones
  #8 (permalink)  
Antiguo 26/01/2009, 13:33
Avatar de aldo1982  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 19 años, 4 meses
Puntos: 6
Respuesta: [Apoerte] Paginacion php+mysql

Cita:
Iniciado por FabianSN Ver Mensaje
Bueno, aqui he hecho algo basandome en tu caso particular.
Para probarlo solo debes cambiar algunos parametros de conexion para especificar la BD y tabla a usar.

Se podría haber hecho en funcion o definiendo clases, pero preferí hacerlo sobre el mismo código para que se entienda mejor el funcionamiento.

Saludos y espero te sirva.

Código PHP:
<table width="550"  cellpadding="2" cellspacing="1">    
    <?
        $cn
=mysql_connect("localhost","root",""); // Depende de la conexion a la BD que tenga cada usuario
        
$db=mysql_select_db("tu_base_de_dato",$cn); // Seleccionar la BD a usar

        
$perPage 10// Filas por pagina
        
$pageplus6//Cuantas paginas mostrar antes de mostrar la página final
        
$Tabla="tabla_a_usar"//Tabla que vas a usar para hacer la consulta

        // Pagina inicial
        
if ($_GET[page]>0) {
            
$page=$_GET[page];
        } else {
            
$page=1;
        }
        
//Calcular el primer valor del parámetro a pasarle a LIMIT
        
$inicio=$perPage*($page-1);

        
//Calcular cantidad de páginas
        
$sql "SELECT count(ID) as cantidad FROM $Tabla"
        
$result mysql_query($sql);
        if (
$row mysql_fetch_array($result)) 
            
$filas=$row[cantidad]; // Total de registros devueltos por la consulta
            
$paginas=ceil($filas/$perPage); // Total de paginas
            
        
        
if ($filas>0) {
            
$sql "SELECT * FROM $Tabla ORDER BY ID LIMIT $inicio,$perPage";
            
$result mysql_query($sql);
            while(
$row mysql_fetch_array($result)) {
                
?>
                <tr>
                    <td align="center"><? echo $row[0?></td>
                    <td align="center"><? echo $row[1?></td>
                </tr>
                <?
            
}
            echo 
"</table>";
            if ((
$page+$pageplus)>$paginas)
                
/* Si la cantidad de páginas que quedan para completar la cantidad de paginas 
                   que se debe mostrar, es menor que dicho parametro reduce la cantidad a mostrar */
                
$pageplus=$paginas-$page
            for(
$n=$page+1;$n<=($page+$pageplus);$n++) {
                echo 
"<a href=\"prueba.php?page=$n\">$n</a>";
                if (
$n+1<=($page+$pageplus)) {
                    
//Coloca el separador (espacio y coma, en este caso)
                    
echo "&nbsp;,";
                } else {
                    if ((
$page+$pageplus)<$paginas) {
                    
// Si el próximo es el final coloca la última página
                    
echo "&nbsp;...&nbsp;<a href=\"prueba.php?page=$paginas\">$paginas</a>"
                    }
                }
            }
            
// Que haya algun link para volver una página hacia atrás
            
if ($page==$paginas)
                echo 
"<a href=\"prueba.php?page=".($page-1)."\">Volver a ".($page-1)."</a>";
            
        } else {
            
?>
            <tr>
                <td colspan="2" id="noRows"><b>No se han encontrado registros</b></td>
            </tr>
            </table>
            <?
        
}
    
?>
hola fabian, mira la idea seria cambiar la funcion, no el uso de la misma ... me explico ?
__________________
LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA
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 04:34.