Foros del Web » Programando para Internet » PHP »

detalles: mostrar imágenes de una carpeta

Estas en el tema de detalles: mostrar imágenes de una carpeta en el foro de PHP en Foros del Web. Hola a todos, A ver si alguien puede ayudarme con este tema, con el que estoy dando vueltas y vueltas y no termino de resolver... ...
  #1 (permalink)  
Antiguo 09/05/2014, 12:20
 
Fecha de Ingreso: marzo-2010
Mensajes: 63
Antigüedad: 14 años, 8 meses
Puntos: 4
detalles: mostrar imágenes de una carpeta

Hola a todos,

A ver si alguien puede ayudarme con este tema, con el que estoy dando vueltas y vueltas y no termino de resolver...

Tengo el siguiente código:

Código PHP:
<?php  
// para leer el directorio 
$ruta "gallery/";  
$filehandle opendir($ruta);  
while (
$file readdir($filehandle)) { 
    if (
$file != "." && $file != "..") { 
        
$arch=$file
        
$archi=$arch.'*'.$archi
    } 

  
closedir($filehandle);
  
// paginating
$archivosfile=explode("*"$archi);
asort($archivosfile); //-------------------------------- AGREGADO!
$currentpage $_SERVER['PHP_SELF']; // current page 
$total=(count($archivosfile)-2); 
$maxRows_Catalog 9;  // max number of files to display per page 
$pageNum_Catalog 0
 
 
if (isset(
$_GET['pag'])) { 
  
$pageNum_Catalog intval($_GET['pag']); 

 
$startRow_Catalog $pageNum_Catalog $maxRows_Catalog
 
if (isset(
$_GET['pag'])) { 
  
$pageNum_Catalog intval($_GET['pag']); 

 
$startRow_Catalog $pageNum_Catalog $maxRows_Catalog
$totalRows_Catalog $total
$totalPages_Catalog ceil($totalRows_Catalog/$maxRows_Catalog)-1
$archivos array_slice($archivosfile$startRow_Catalog$maxRows_Catalog);
 
// paginating    
 
?> 
<br />
<div> mostrando <?php echo ($startRow_Catalog 1?> a <?php echo min($startRow_Catalog $maxRows_Catalog$totalRows_Catalog?> de <?php echo $totalRows_Catalog ?></div>
<table border="0" align="center"> 
                    <tr> 
                      <td><?php if ($pageNum_Catalog 0) { // Show if not first page ?> 
                            <a href="<?php echo $currentpage?>?pag=0"><img src="img/first.png" width="24" height="24"/></a> 
                            <?php }else{ // Show if not first page ?> 
                            <span class="alpha"><img src="img/first.png" width="24" height="24"/></span>                            <?php ?>                      </td> 
                      <td><?php if ($pageNum_Catalog 0) { // Show if not first page ?> 
                            <a href="<?php echo $currentpage?>?pag=<?php echo htmlentities($_GET['pag']-1); ?>"><img src="img/prev.png" width="24" height="24"/></a> 
                            <?php }else{ // Show if not first page ?> 
                            <span class="alpha"><img src="img/prev.png" width="24" height="24"/></span>                            <?php ?>                      </td> 
                      <td><?php if ($pageNum_Catalog $totalPages_Catalog) { // Show if not last page ?> 
                            <a href="<?php echo $currentpage?>?pag=<?php echo htmlentities($_GET['pag']+1); ?>"><img src="img/next.png" width="24" height="24"/></a> 
                            <?php }else{ // Show if not last page ?> 
                            <span class="alpha"><img src="img/next.png" width="24" height="24"/></span>                            <?php ?>                      </td> 
                      <td><?php if ($pageNum_Catalog $totalPages_Catalog) { // Show if not last page ?> 
                            <a href="<?php echo $currentpage?>?pag=<?php echo $totalPages_Catalog ?>"><img src="img/last.png" width="24" height="24"/></a> 
                            <?php }else{ // Show if not last page ?> 
                            <span class="alpha"><img src="img/last.png" width="24" height="24"/></span>                            <?php ?>                      </td> 
      </tr> 
                  </table>
<?php 
foreach ($archivos as $archivo) {  
echo 
'<div class="indiv"><img class="thumb" src="'.$ruta.$archivo.'" /><br><div class="etiq"><label></label></div></div>';
}
?>

No ordenaba alfabéticamente los resultados, por lo que le agregué la línea:
asort($archivosfile); con lo que obtuve el orden esperado... y también pude resolver el tema de que muestre las imágenes en una "tabla" que pude armar con DIVs (float: left;) y quedó perfecto!!


Pero no termino de resolver estos problemas que le encuentro:

Cuenta 1 ítem menos del que realmente hay en el directorio, al mismo tiempo que
devuelve un ítem "fantasma" (y de más), que es el nombre del directorio (y como si fuera una imagen), pero en realidad, sí muestra TODAS las imágenes!!

En resumen, el directorio tiene 12 imagenes... y el "contador" dice que encuentra 11 elementos, pero al mismo tiempo muestra 13 ya que incluye TODAS las imágenes y agrega una "imagen fantasma" que es en realidad, el nombre del directorio!


Les dejo el link para que vean el resultado:
http://webzite.cu.cc/prueba.html



A ver si alguien me puede ayudar a descular qué es lo que le pasa... que no lo puedo encontrar y está superando mi condición de NOVATO en PHP!! =(

Muchas gracias por adelantado!
  #2 (permalink)  
Antiguo 09/05/2014, 12:46
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Respuesta: detalles: mostrar imágenes de una carpeta

Buenas!. A lo mejor puede ser el bucle for que tienes al comienzo de la página.

Prueba añadiendo un <=

Codigo:
Código Javascript:
Ver original
  1. for (i = 0; i < totalImg; i++){
  2.     var src = imagenes[i].src;
  3.     labels[i].innerHTML = src.substring(src.lastIndexOf("/") + 1, src.lastIndexOf(".")).replace(/%20/g, " ");
  4. }

Porque totalImg = imagenes.length; cuenta los valores y estás colocando un < en vez de <=

El código final es así:

Código Javascript:
Ver original
  1. for (i = 0; i <= totalImg; i++){
  2.     var src = imagenes[i].src;
  3.     labels[i].innerHTML = src.substring(src.lastIndexOf("/") + 1, src.lastIndexOf(".")).replace(/%20/g, " ");
  4. }

Prueba si esto es el fallo de que te cuente 1 menos. Espero que si.

Sino esperemos la respuesta de los expertos :) , un saludo!!!
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #3 (permalink)  
Antiguo 09/05/2014, 13:23
 
Fecha de Ingreso: marzo-2010
Mensajes: 63
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: detalles: mostrar imágenes de una carpeta

hola HackID1! muchas gracias por tu aporte al tema...

lamentablemente, no es la solución... esa parte del código corresponde a un script genial, que me facilitó Alexis88 y que lo que hace es mostrar el nombre de las imágenes (por eso no la incluí en el código del post).

de todos modos, ante tu sugerencia, se me ocurrió que hubiera algún tipo de conflicto entre el script de Alexis88 y el PHP... por lo que lo comenté todo, a ver si el tema venía por ahí, pero NO.
anulé el script de Alexis88 (que dejé comentado por el momento) pero los problemas del PHP siguen intactos! =(
  #4 (permalink)  
Antiguo 09/05/2014, 14:09
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: detalles: mostrar imágenes de una carpeta

El problema surge al momento en el que alimentas a la variable $archivo, pues cuando lo recorres con el bucle foreach, además, no sé por qué restas 2 al total, supongo que querrás recorrer al array desde la posición inicial (cero), entonces, solamente debes de restar 1.

Para tomar a las imágenes del directorio, lo haría así:

Código PHP:
Ver original
  1. function filtrar ($imagen){
  2.     $tipos = array('jpg', 'jpeg', 'png', 'gif');
  3.     return in_array(substr($imagen, strripos($imagen, '.') + 1), $tipos);
  4. }
  5.  
  6. $imagenes = array_filter(array_diff(scandir('gallery/'), array('..', '.')), 'filtrar');

De este modo, tomo a todos los archivos del directorio gallery (recordando que scandir devuelve un array) y lo filtro con la función array_diff para así obtener al conjunto de archivos que no coincidan con los elementos del segundo array que paso como parámetro. Luego, hago un segundo filtro, esta vez con la función array_filter, a la cual le paso el array resultante de la operación anterior y la función filtrar, la cual devuelve únicamente a los archivos cuya extensión corresponda con alguna de las dadas en el array $tipos. Para esto, hago uso de las siguientes funciones:

Te sugiero revisar cada enlace para que sepas qué hace cada una de esas funciones.

Como $imagenes es un array con todas las imágenes filtradas, solo es cuestión de que las imprimas mediante un bucle.

Código PHP:
Ver original
  1. <?php
  2. foreach ($imagenes as $img){
  3. ?>
  4.     <img src = 'gallery/<?=$img?>' /> <br />
  5. <?php
  6. }

Mientras que el total de imágenes, lo obtienes utilizando la función count aplicada al array $imagenes.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 09/05/2014, 14:15
 
Fecha de Ingreso: marzo-2010
Mensajes: 63
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: detalles: mostrar imágenes de una carpeta

UNO MENOS!! mi POCO PHP pudo con una! jajajajaaa

$total=(count($archivosfile)-2);

resulta en el número total de archivos... y modificándolo por

$total=(count($archivosfile)-1);

pude hacer que devuelva el total real de IMÁGENES en el directorio!!

de cualquier manera, no pude todavía con la "imágen fantasma" que sigue devolviendo... que es en realidad, el nombre del directorio, insertado como

<img src="gallery/">

...que NO ENTIENDO por qué lo hace! =(
  #6 (permalink)  
Antiguo 09/05/2014, 14:17
 
Fecha de Ingreso: marzo-2010
Mensajes: 63
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: detalles: mostrar imágenes de una carpeta

Hola Alexis88!!

Gracias por tu colaboración!!
Estaba escribiendo, mientras vos me respondías... y TENÉS RAZÓN!
estaba mal restado ese valor y me di cuenta, después de romperme mucho la cabeza.

... ya me pongo a ver qué pasa con tu sugerencia y te cuento en un rato!
MUCHAS GRACIAS!
  #7 (permalink)  
Antiguo 09/05/2014, 22:05
 
Fecha de Ingreso: marzo-2010
Mensajes: 63
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: detalles: mostrar imágenes de una carpeta

bueno... me rindo!! JA! sisi... me ganó el PHP =(

honestamente, me doy cuenta de que lo mio es igual a saber decir "cat" y "dog"... y con eso, pretender escribir una carta en inglés!

gracias a todos los que aportaron e intentaron desencajarme... voy a tener que ponerme con más paciencia (y tiempo!) a estudiar PHP, pero por ahora voy a tener que encontrar otra vuelta por afuera, porque ya estoy en tiempo de descuento!!

saludos y de nuevo, muchas gracias.

Etiquetas: carpeta, detalles, html, tabla
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 10:15.