Estoy haciendo una web, que entre otras cosas tiene varias galería de imágenes. Estas galerias consultan el directorio de una subcategoria ($carpeta_sub= "/subcarpeta/", $carpeta_sub2= "/subcarpeta2/",...) y después con "$archivos = scandir($carpeta);" saco todas las imágenes de dicha subcategoria. El tema está en que quiero paginarlas de 12 en 12.
Quiero saber si hay alguna manera de evitar sacar la paginación por consulta mysql y hacerlo directamente mediante el directorio y php
Una de las pruebas que he hecho ha sido esta (lo he adaptado para no ahcer referencias externas a otros directorios, sin contar la conexión a la bd);
Pero por ejemplo de una galería de 20 imágenes al poner "$mostrar = 12"
· La página 0 me muestra de la 1 a la 12 (todo bien)
· La página 1 me muestra de la 9 a la 20 (orden aleatorio pero siempre muestra 12, repitiendo algunas)
Código PHP:
<?php
$arbol = $_SERVER['DOCUMENT_ROOT'];
$carpeta_sub = ("/subcarpeta/"); //está variable consultará después la bd
$carpeta = $arbol . $carpeta_sub ;
$archivos = scandir($carpeta);
$paginar = $archivos;
$mostrar = 12; //numero de elementos por pagina
$cuantos = count($paginar);
$paginas = $cuantos / $mostrar; //numero de paginas
if (!isset($mostrar) or empty($mostrar) or !is_int($mostrar)) {
}
if (empty($_GET["pagina"])) { //si no hay pagina
$desde = 0; //principio de la primera pagina
$hasta = $desde + $mostrar; //fin de la primera pagina
}
if (!empty($_GET["pagina"])) { //si estamos en una pagina distinta de la primera...
$desde = (int)$_GET["pagina"]; //principio de la pagina X
if ($desde + $mostrar < $cuantos) { //si principio + 10 no es mayor a la cantidad de elementos
$hasta = $desde + $mostrar; //fin de la pagina X
}else{
$hasta = $desde + ($cuantos - $desde); //por si $principio + 10 es superior al numero de elementos
}
}
for ($i=$desde; $i<$hasta; $i++)
{if ($paginar[$i] == '.' || $paginar[$i] == '..'){ echo '';}else {
echo '<img src="'.$carpeta.$paginar[$i].'"/><br/>';
}}
for ($p=0; $p<=$paginas; $p++) {
$dexde = $p * $mostrar; //para marcar el inicio de la siguiente pagina
echo '<a href="template.php?pagina='.$dexde.'">'.$p.'</a> - '; //mostramos la lista de paginas. Que cada uno las muestre como quiera
}
?>
Añado:
- Esto es una parte del conjunto, previamente por mysql cada imagen está sujeta a una subcategoría, así que con el scandir() me ahorro tiempo de ejecución
- Es una web para hostearla en un server gratuito y usarla yo y unos amigos para compartir fondos e imágenes, si alguien está interesado liberaré el sistema de usuarios, panel de control, perfiles y admin para quien lo quiera cuando lo acabe.
Gracias de antemano a quien pueda ayudar.