Hace un tiempo me surgió el problema de paginar un vector (Array) de resultados de una búsqueda, por lo que busqué la forma de crear una función que me permitiera listar los items correspondientes, pasandole por parámetros el vector en cuestión, el lÃmite de resultados a mostrar y la página solicitada.
He aquà mi solución (es una base, que necesita ser pulida, eso les dejo a ustedes
)
paginar.php
Código :
function paginar($v, $l, $p) {
Primero que nada definimos la función junto con las variables que se han de pasar como parámetro, ahora bien, necesitamos saber cuales son las condiciones de inicio de nuestro paginador, tales como la cantidad de páginas a mostrar, en función de la longitud del vector y del lÃmite de items a desplegar:
Código :
// DEFINIMOS LA CANTIDAD DE PÃGINAS
$paginas = ceil(count($v) / $l);
Ahora bien, si queremos mostrar cada item del vector $v necesitaremos recorrerlo con un bucle, pero… ¿desde dónde empezarÃamos a mostrar y hasta dónde? Para ello necesitamos definir las condiciones de nuestro bucle recorredor como sigue:
Código :
// CONDICION DE INICIO
$inicio = ($p-1)*$l;
// CONDICION DE FINAL
$final = $p*$l;
Y ya estamos listos para empezar a recorrer el vector mostrando cada resultado dentro de un div de id="item" dentro del div de resultados. Debemos tener en cuenta que, si no existiera el item i-ésimo dentro del vector $v tenemos que dejar de listar items:
Código :
// MOSTRAMOS LOS ITEMS RESPECTIVOS
echo '<div id="resultados">';
for ($i=$inicio; $i<$final; $i++) {
if (isset($v[$i]))
echo "<div id="item">$i.- $v[$i]</div>";
else
break;
}
echo '</div>';
Listo, tenemos los resultados correspondientes a la página $p, pero necesitarÃamos mostrar el total de páginas a modo de menú de hipervÃnculos para poder navegar entre los Ãtems. Para ello comprobaremos si nos encontramos en la primera pagina para no mostrar "Página anterior" o en la última para no mostrar "Página siguiente", además de no crear un vÃnculo a la misma página:
Código :
// LISTAMOS LAS PÃGINAS
echo '<div id="paginas">';
if ($p>1)
echo "<a href="index.php?p=" . ($p-1) . "">Página Anterior</a> - ";
for ($i=1; $i<=$paginas; $i++) {
if ($i == $p)
echo "<strong>$i</strong> ";
else
echo "<a href="index.php?p=$i">$i</a> ";
}
if ($p<$paginas)
echo " - <a href="index.php?p=" . ($p+1) . "">Página Siguiente </a>";
echo '</div>';
return;
}
Eso serÃa todo, para llamar a la función simplemente realizamos:
index.php
Código :
<?php
$vector = array("hola", "chau", "hola", "chau", "hola", "chau", "hola", "chau", "hola", "chau", "hola", "chau", "hola", "chau", "hola", "chau", "hola", "chau", "hola", "chau", "hola", "chau", "hola", "chau", "hola", "chau", "hola", "chau" );
require ("paginar.php");
if (isset($_GET[p]))
$p = $_GET[p];
else
$p=1;
paginar($vector, 10, $p);
?>
Espero que les sirva de base para un desarrollo más complejo, saludos!
Pueden ver el ejemplo funcionando en http://www.reweb.com.ar/labs/paginarVector/


