Foros del Web » Programando para Internet » PHP »

Función paginacion.

Estas en el tema de Función paginacion. en el foro de PHP en Foros del Web. Me gustaría hacer una función generica en php para paginar ya que tengo que paginar en varios casos y repetir el codigo me parece bastante ...
  #1 (permalink)  
Antiguo 16/02/2008, 12:06
 
Fecha de Ingreso: marzo-2007
Ubicación: España
Mensajes: 133
Antigüedad: 17 años, 8 meses
Puntos: 0
Función paginacion.

Me gustaría hacer una función generica en php para paginar ya que tengo que paginar en varios casos y repetir el codigo me parece bastante sucio y dificil de modificar... Entonces me gustaria tener una funcion en un fichero aparte, y poder llamarla desde donde se necesite....

El problema es que no sé que partes se pueden apartar. y cuales no....
El codigo para paginar libros es el siguiente...
Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?
include "includes/connexio.php";
$dbconectarse();

$cerca=$_REQUEST['cerca']; $criteri=$_REQUEST['criteri']; 
$iono=$_REQUEST['iono']; 
$cerca2=$_REQUEST['cerca2']; $criteri2=$_REQUEST['criteri2'];
$tipus=$_REQUEST['tipus']; $llengua=$_REQUEST['llengua']; $nivell=$_REQUEST['nivell'];
$editorial=$_REQUEST['editorial']; $any=$_REQUEST['any'];


//Construcción de la consulta.
if ($cerca=="" && $cerca2=="" && $tipus=="0" && $llengua=="0" && $nivell=="0" && $editorial=="" && $any==""){
    echo 
"no hay criterios de busqueda";
}else{

    
$cons="SELECT * FROM catàleg WHERE Registre > 0 ";
    if (
$cerca!="" && $criteri!=""){
        if (
$criteri == "tit"){ $cons $cons."AND Títol LIKE '%$cerca%' "//'%".$nom_proy."%
        
}else if ($criteri == "aut"){ $cons $cons."AND Autors LIKE '%$cerca%' ";
        }else if (
$criteri == "par"){ $cons $cons."AND MATCH (Títol, Autors, Descriptors, Resum, `camp lliure`) AGAINST ('$cerca') ";
        }else if (
$criteri == "mat"){ $cons $cons."AND Descriptors LIKE '%$cerca%' ";
        }else if (
$criteri == "ISBN"){ $cons $cons."AND ISBN = '$cerca' "; }
    }

    if (
$iono=="i"){ $cons $cons."AND "; }
    if (
$iono=="o"){ $cons $cons."OR "; } 
    if (
$iono=="no"){
        if (
$criteri2 == "tit"){ $cons $cons."AND Títol NOT LIKE '%$cerca2%' "//'%".$nom_proy."%
        
}else if ($criteri2 == "aut"){ $cons $cons."AND Autors NOT LIKE '%$cerca2%' ";
        }else if (
$criteri2 == "par"){ $cons $cons."AND NOT MATCH (Títol, Autors, Descriptors, Resum, `camp lliure`) AGAINST ('$cerca2') ";
        }else if (
$criteri2 == "mat"){ $cons $cons."AND Descriptors NOT LIKE '%$cerca2%' ";
        }else if (
$criteri == "ISBN"){ $cons $cons."AND ISBN != '$cerca2' "; }
    }

    if (
$cerca2!="" && $criteri2!="" && $iono!="no"){ 
        if (
$criteri2 == "tit"){ $cons $cons."Títol LIKE '%$cerca2%' "//'%".$nom_proy."%
        
}else if ($criteri2 == "aut"){ $cons $cons."Autors LIKE '%$cerca2%' ";
        }else if (
$criteri2 == "par"){ $cons $cons."MATCH (Títol, Autors, Descriptors, Resum, `camp lliure`) AGAINST ('$cerca2') ";
        }else if (
$criteri2 == "mat"){ $cons $cons."Descriptors LIKE '%$cerca2%' ";
        }else if (
$criteri == "ISBN"){ $cons $cons."ISBN = '$cerca2' ";
    }
}

if (
$tipus != "" && $tipus !="0"){ $cons =$cons."AND Material = '$tipus' "; }
if (
$llengua != "" && $llengua !="0"){ $cons=$cons."AND Llengua = '$llengua' "; }
if (
$nivell != "" && $nivell !="0"){ $cons=$cons."AND Nivell = '$nivell' "; }
if (
$editorial != ""){ $cons=$cons."AND Editor = '$editorial' "; }
if (
$any != ""){ $cons=$cons."AND Data = '$any' "; }    

//Fin de la construccion de la consulta sin los limites.

//Inicio de calculos de la paginación.

    
$res=mysql_query($cons,$db);
    
$numeroRegistros=mysql_num_rows($res);   //Comptar el número de resultats
    
if ($numeroRegistros <=0){                 //Si no hi han resultats
        
echo "<div align='center'>";
        echo 
"<font face='verdana' size='-2'>No s'han trobat resultats</font>";
        echo 
"</div>";
    }else{
        
$tamPag=10;  //número de resultats per pàgina
        
$pagina=$_GET['pagina'];
        
        
//pàgina actual si no esta definida y limits
        
if(!isset($pagina))
        {
               
$pagina=1;
               
$inicio=1;
               
$final=$tamPag;
        }        
        
        
$limitInf=($pagina-1)*$tamPag;
        
        
//calculo del numero de paginas
        
$numPags=ceil($numeroRegistros/$tamPag);
        if(!isset(
$pagina))
        {
               
$pagina=1;
               
$inicio=1;
               
$final=$tamPag;
        }else{
            
$seccionActual=intval(($pagina-1)/$tamPag);
            
$inicio=($seccionActual*$tamPag)+1;

            if(
$pagina<$numPags)
            {
               
$final=$inicio+$tamPag-1;
            }else{
                
$final=$numPags;
            }
                
            if (
$final>$numPags){
                
$final=$numPags;
            }
        }
        
        
//creacion de la consulta con limites
        
$consLIM $cons."LIMIT ".$limitInf.",".$tamPag;
        
//echo $consLIM;
        
$result=mysql_query($consLIM,$db);
        
        echo 
"<div align='center'>";
        echo 
"<font face='verdana' size='-2'>Trobats ".$numeroRegistros." documents<br>";
        echo 
"</font></div>";
        
        echo 
"<table align='center' width='80%' border='0' cellspacing='1' cellpadding='0'>";
        echo 
"<tr><td colspan='4'><hr noshade></td></tr>";
        echo 
"<th bgcolor='#87CEFA'>Seleccionar</a></th>";
        echo 
"<th bgcolor='#87CEFA'>Codi</a></th>";
        echo 
"<th bgcolor='#87CEFA'>Títol</a></th>";
        echo 
"<th bgcolor='#87CEFA'>Autors</a></th>";
        
        while(
$registre=mysql_fetch_array($result))
        {
?>
<!-- tabla de resultados -->
    <tr bgcolor="#E0FFFF" onMouseOver="this.style.backgroundColor='#B0E0E6';" onMouseOut="this.style.backgroundColor='#E0FFFF';">
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><b><input name="sel" type="checkbox" value=""></b></font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><b><? echo $registre["Registre"]; ?></b></font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><b><? echo $registre["Títol"]; ?></b></font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><b><? echo $registre["Autors"]; ?></b></font></td>
  </tr>
<!-- fin tabla resultados -->
<?
        
}//fin while

            
echo "</table>";
    }
//fin if

            //////////a partir de aqui viene la paginacion
?>
    <br>
    <table border="0" cellspacing="0" cellpadding="0" align="center">
    <tr><td align="center" valign="top">
<?

    
if($pagina>1)
    {
    
        echo 
"<a class='p' href='".$_SERVER['PHP_SELF']."?pagina=".($pagina-1)."&cerca=".$cerca."&criteri=".$criteri."&iono=".$iono."&cerca2=".$cerca2."&criteri2=".$criteri2."&tipus=".$tipus."&llengua=".$llengua."&nivell=".$nivell."&editorial=".$editorial."&any=".$any."'>";
        echo 
"<font face='verdana' size='-2'>Anterior</font>";
        echo 
"</a>&nbsp;";
    }

    for(
$i=$inicio;$i<=$final;$i++)
    {
        if(
$i==$pagina)
        {
            echo 
"<font face='verdana' size='-2'><b>".$i."</b>&nbsp;</font>";
        }else{
            echo 
"<a class='p' href='".$_SERVER['PHP_SELF']."?pagina=".$i."&cerca=".$cerca."&criteri=".$criteri."&iono=".$iono."&cerca2=".$cerca2."&criteri2=".$criteri2."&tipus=".$tipus."&llengua=".$llengua."&nivell=".$nivell."&editorial=".$editorial."&any=".$any."'>";
            echo 
"<font face='verdana' size='-2'>".$i."</font></a>&nbsp;";
        }
    }
    if(
$pagina<$numPags)
    {
        echo 
"&nbsp;<a class='p' href='".$_SERVER['PHP_SELF']."?pagina=".($pagina+1)."&cerca=".$cerca."&criteri=".$criteri."&iono=".$iono."&cerca2=".$cerca2."&criteri2=".$criteri2."&tipus=".$tipus."&llengua=".$llengua."&nivell=".$nivell."&editorial=".$editorial."&any=".$any."'>";
        echo 
"<font face='verdana' size='-2'>Següent</font></a>";    }
    
//////////fin de la paginacion
        
mysql_close($db);
        
?>
    </td></tr>
    </table>
    <? ?>
<div align="center"><font face="verdana" size="-2"><a class="p" href="/eoitarragona/cataleg.php">::Tornar a la consulta del catàleg::</a></font></div>
</body>
</html>
No siempre voy a listar las mismas cosas... y cuando se seleccione una fila tampoco haré lo mismo...

Espero me puedan ayudar.
  #2 (permalink)  
Antiguo 16/02/2008, 14:27
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 19 años, 2 meses
Puntos: 55
Re: Función paginacion.

podes hacer 2 funciones una

function limitePaginacion(){
$tamPag=10; //número de resultats per pàgina
$pagina=$_GET['pagina'];

//pàgina actual si no esta definida y limits
if(!isset($pagina))
{
$pagina=1;
$inicio=1;
$final=$tamPag;
}

$limitInf=($pagina-1)*$tamPag;

//calculo del numero de paginas
$numPags=ceil($numeroRegistros/$tamPag);
if(!isset(
$pagina))
{
$pagina=1;
$inicio=1;
$final=$tamPag;
}else{
$seccionActual=intval(($pagina-1)/$tamPag);
$inicio=($seccionActual*$tamPag)+1;

if(
$pagina<$numPags)
{
$final=$inicio+$tamPag-1;
}else{
$final=$numPags;
}

if (
$final>$numPags){
$final=$numPags;
}
}
return $limitInf.",".$tamPag;

}
//creacion de la consulta con limites
$consLIM = $cons."LIMIT ".limitePaginacion();



y otra para hacer los links a las siguientes paginas

function linksPaginacion (){
$tamanio=10;
$pagina=$_GET['pagina'];
for($i=0;$i<$tamanio;$i++){
if($i!=$pagina)
echo '<a href="?pagina='.($i+1).'">'.($i+1).'</a>';
else
echo $pagina;
}
}
__________________
Degiovanni Emilio
developtus.com
  #3 (permalink)  
Antiguo 16/02/2008, 16:51
 
Fecha de Ingreso: marzo-2007
Ubicación: España
Mensajes: 133
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: Función paginacion.

gracias emiliodeg,

la primera parte la entiendo, pero la parte de los links no... no se como aplicarlo al codigo, o como poner la llamada a la funcion entre mi link, por ejemplo este:
echo "<a class='p' href='".$_SERVER['PHP_SELF']."?pagina=".($pagina-1)."&cerca=".$cerca."&criteri=".$criteri."&iono=". $iono."&cerca2=".$cerca2."&criteri2=".$criteri2."& tipus=".$tipus."&llengua=".$llengua."&nivell=".$ni vell."&editorial=".$editorial."&any=".$any."'>";

muchas gracias
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 21:58.