Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/04/2010, 10:45
7sistemas
 
Fecha de Ingreso: marzo-2010
Ubicación: Buenos Aires
Mensajes: 59
Antigüedad: 14 años, 1 mes
Puntos: 2
Paginacion en PHP

Buenas tardes. Quiero hacer mi pequeño aporte, tanto a la comunidad de forosdelweb.com, como a todos los lectores.

Cuando trabajamos con PHP, es inevitable que en algun momento necesitemos acceder y operar con una base de datos. Muchas veces, tenemos una gran cantidad de registros para mostrar. Y, por diferentes motivos (rendimiento, profesionalidad, etc.) no queremos mostrarlos todos en la misma pagina.

Por ese motivo, les dejo un pequeño script para paginar resultados provenientes de una consulta a una base de datos, para quien le pueda interesar.

Nota: seguramente, el script se puede mejorar mucho. Asique todas las sugerencias y criticas constructivas, seran bienvenidas.

Hasta luego.



Código PHP:
<?php
/*
Script desarrollado por Julisho

Este script sirve para paginar resultados provenientes de una consulta a una base de datos. Hay que indicar la cantidad de resultados por pagina, el total de registros, la url de destino, y el conjunto parametro=valor (todos los que hagan falta). Los parametros se pasan por URL.

La forma de especificar los valores necesarios, es mediante un array: $PAGINACION[], que debe prepararse antes de incluir el archivo.

Para indicar la cantidad de resultados por pagina:     $PAGINACION['resultados']
Para indicar el total de registros:                 $PAGINACION['total_registros']
Para indicar la url de destino:                     $PAGINACION['url_destino']
Para indicar un parametro y un valor:                $PAGINACION['parametros']['parametro'] = "valor";

Debe realizarse una consulta a la base de datos, sin procesar los resultados. El script añadira los limites. Por ejemplo:

<?php
    // conexion a la base de datos

    //preparamos la consulta
    $query = 'select nombre from usuarios order by nombre';    //supongamos que son 41 registros

    //ejecutamos la consulta
    $consulta = mysql_query($query, $conexion);

    //creamos el array $PAGINACION
    $PAGINACION = array();

    //asignamos los valores necesarios
    $PAGINACION['total_registros'] = mysql_num_rows($consulta);
    $PAGINACION['url_destino'] = "index.php";
    $PAGINACION['resultados'] = 15;

    //Recuerda que se pueden crear tantos pares parametro=valor como sea necesario
    $PAGINACION['parametros']['obj'] = "busqueda";
    $PAGINACION['parametros']['opt'] = "nombre";

    //llamamos al archivo de paginacion
    require_once("paginacion.php");

    //ejecutamos nuevamente la consulta. Esta vez, estaran establecidos los limites. Nuestra consulta, ahora, estara asi:
    //$query = 'select nombre from usuarios order by nombre limit 1, 15'; // para la primera pagina
    //$query = 'select nombre from usuarios order by nombre limit 16, 31'; // para la segunda pagina
    //$query = 'select nombre from usuarios order by nombre limit 32, 47'; // para la tercera pagina
    //y asi sucesivamente
    $consulta = mysql_query($query, $conexion);

    //luego de esto, puedes organizar los resultados como mejor se ajuste a tu pagina.

    ?>
*/
if (isset($_GET['pagina'])) { $pagina $_GET['pagina']; }
else { 
$pagina 1; }
$inicio = ($pagina 1) * $PAGINACION['resultados'];
$total_paginas ceil($PAGINACION['total_registros'] / $PAGINACION['resultados']);                
?>                
<p class="_paginacion">
<span class="izquierda">Resultados: <?php echo $PAGINACION['total_registros']; ?></span>
<span class="centro">Paginas: <?php echo $total_paginas?></span>
<span class="derecha">Resultados por pagina: <?php echo $PAGINACION['resultados']; ?></span>
</p>
<?php
echo '<p id="paginacion">';

if (
$pagina 1)
{
$salida '<span class="izquierda">';

$salida .= "<a href=\"" $PAGINACION['url_destino'] . "?";
foreach(
$PAGINACION['parametros'] as $parametro => $valor)
{
$salida .=  "$parametro=$valor&";
}
$salida .= "pagina=".($pagina-1)."\">< Anterior</a>";

$salida .= " | ";

$salida .= '<a href="' $PAGINACION['url_destino'] . '?';
foreach(
$PAGINACION['parametros'] as $parametro => $valor)
{
$salida .=  "$parametro=$valor&";
}
$salida .= "pagina=1\">Inicio</a>";

$salida .= "</span>";


echo 
$salida;
}
elseif (
$pagina <= 1)
{
echo 
'<span class="izquierda">< Anterior | Inicio</span>';
}
echo 
'<span class="centro">Pagina: ' $pagina "\n";

echo 
'</span>' "\n";

if (
$pagina $total_paginas)
{
$salida '<span class="derecha"><a href="' $PAGINACION['url_destino'] . '?';
foreach(
$PAGINACION['parametros'] as $parametro => $valor)
{
$salida .=  "$parametro=$valor&";
}
$salida .= "pagina=$total_paginas\">Final</a> | <a href=\"" $PAGINACION['url_destino'] . "?";
foreach(
$PAGINACION['parametros'] as $parametro => $valor)
{
$salida .=  "$parametro=$valor&";
}
$salida .= "pagina=".($pagina+1)."\">Siguiente ></a></span>";
echo 
$salida;
}
elseif (
$pagina >= $total_paginas)
{
echo 
'<span class="derecha">Final | Siguiente ></span>';
}
echo 
'</p>' "\n";
$query .= ' limit ' $inicio ', ' $PAGINACION['resultados'];
?>