Foros del Web » Programando para Internet » PHP »

Catálogo de imágenes automático

Estas en el tema de Catálogo de imágenes automático en el foro de PHP en Foros del Web. Buenas a todos. Mi problema es el siguiente: Tengo unas 2500 imágenes de unos 300 bytes cada una. Las imágenes están almacenadas en carpetas (unas ...
  #1 (permalink)  
Antiguo 17/09/2003, 08:04
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
Pregunta Catálogo de imágenes automático

Buenas a todos.

Mi problema es el siguiente:

Tengo unas 2500 imágenes de unos 300 bytes cada una. Las imágenes están almacenadas en carpetas (unas 20 carpetas) clasificadas por categorías.

Por ejemplo: las imágenes de "amor" están en la carpeta "amor". Las imágenes de "sexo" están en la carpeta "sexo" y asi sucesivamente forman unas 20 carpetas.

Lo que quiero hacer es que PHP me genere un catálogo automático con cada carpeta y con todas las imágenes que tiene dentro. Por ejemplo un catálogo con todas las imágenes de la carpeta "amor" otro con la carpeta "sexo", etc.

Hacer un catálogo a mano de 2500 imágenes es imposible, por lo tanto quiero que PHP lo haga solito. De tal forma que si yo introduzco una imagen nueva en la carpeta, dicha imagen se meta solita en el catálogo.

Quiero hacer algo exactamente como esto: http://www.gsmspain.com/logosytonos/...os&catego=Amor

Claro, las imágenes de cada carpeta no pueden aparecer todas en una sola página, tiene que dividirse asi como 1,2,3... ya que cada carpeta tiene como 200 imágenes. Deberian aparecer unas 40 por página.

¿Alguno sabe como hacerlo? ¿Qué funciones debo usar?
Yo quiero hacer mi propio script, pero necesito un poco de ayuda... Thankz !!!

C ya !
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #2 (permalink)  
Antiguo 17/09/2003, 08:15
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Revisa www.php.net/dir . Con esas funciones puedes recorrer directorios. Simplemente haz que el subdirectorio se llame como el valor del parametro, abres ese directorio, y metes los nombres de los ficheros en un array (mayor facilidad de manejo).

Para la paginacion, pues pasas tambien la "pagina" de imagenes que quieres mostrar. Luego calculas la posicion en el array de la primera imagen en esa pagina y con un bucle muestras desde ese indice hasta ese indice+imagenes por pagina o el final del array, lo que ocurra antes.

Saludos.

PD: Seguro que hay por ahi scripts ya hechos, pero esta seria la descripcion de lo que hacen.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 17/09/2003, 08:45
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
josemi no entendí lo del array correspondiente a la paginación. ¿Me puedes explicar mejor?

Thankz a lot!
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #4 (permalink)  
Antiguo 17/09/2003, 08:50
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
Ok digamos que usamos la función "scandir". Dicha función introduce en un array los nombres de los archivos del directorio indicado. Luego mediante un bucle puedo ir mostrando cada una de las entradas del array.

¿Cómo los pagino?
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #5 (permalink)  
Antiguo 17/09/2003, 15:14
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Bueno, pues en los enlaces a las distintas paginas pasas la pagina a mostrar, de 1 a n. Luego calculas el primer elemento de esa pagina con:

ipp * (pagina-1)

Siendo ipp el numero de imagenes por pagina, y pagina la pagina a mostrar. Entodes haces el bucle:
Código PHP:
$inicio=$ipp * ($pagina-1)
for (
$i=$inicio;$i<inicio+$ipp;$i++) {
// mostramos la imagen
echo $imagenes[$i];

Luego los links a las distintas paginas los generas como para las paginaciones de resultados de consolas, en base al numero total de elementos del array.

Suerte.

PD: scandir() solo existe en PHP 5.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 17/09/2003, 16:01
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
¿Qué funcion puedo usar en lugar de "scandir"?
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #7 (permalink)  
Antiguo 17/09/2003, 17:12
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Pues abres el directorio con opendir() y lo recorres con un while y readdir(). Mira en el manual. Tambien creo que lo puedes hacer con el objeto dir. Dentro del bucle vas añadiendo elementos al array.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #8 (permalink)  
Antiguo 17/09/2003, 18:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
También está el objeto predefinido:

dir()
www.php.net/dir

facilita mucho la taréa de trabajar con archivos ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 19/09/2003, 12:11
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
Ok... usé el objeto dir() y logré hacer lo siguiente:

Código PHP:
<?php
$directorio 
dir("logos/amor");
    for (
$i=1$i<=10$i++){
        echo 
"<tr align=\"center\">";
        for (
$e=1$e<=10$e++){
            
$entrada $directorio->read();
            echo 
"<td bgcolor=\"#99CC99\"><img src=\"".$entrada."\" width=\"72\" height=\"14\"></td>";
        }
        echo 
"</tr>";
    }
$directorio->close();
?>
Genera la tabla perfectamente y coloca una imágen dentro de cada celda, pero la ruta de las imágenes es erronea...

¿Qué tengo malo?.

Cuando chequeo la ruta de las imágenes me muestra como si la imagen estuviese almacenada en la carpeta donde se encuentra el script.

¿Cómo hago que busque las imágenes en la carpeta logos/amor?

Thankz !
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #10 (permalink)  
Antiguo 19/09/2003, 12:51
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
Ok, inventé algo que funciona un poco como yo quiero:

Código PHP:
$directorio dir("logos/amor");
    for (
$i=1$i<=10$i++){
        echo 
"<tr align=\"center\">";
        for (
$e=1$e<=10$e++){
            
$entrada $directorio->read();
            echo 
"<td bgcolor=\"#99CC99\"><img src=\"".$entrada."\" width=\"72\" height=\"14\"></td>";
        }
        echo 
"</tr>";
    }
$directorio->close(); 
El asunto es que la ruta de las imágenes parece estar incorrecta; hace como si las imágenes estuviesen almacenadas en la misma carpeta donde se encuentra el script.

¿Cómo hago para que me tome la ruta logos/amor?
¿Cómo puedo paginar los resultados?
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #11 (permalink)  
Antiguo 19/09/2003, 13:40
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
El read del dir solo devuelve el nombre del fichero. Y en el src del img debes porçner el path desde el directorio raiz del sitio. Yo meteria en una variable el path que usas para abrir el directorio:
Código PHP:
$path="logos/amor";
$directorio dir($path);

    for (
$i=1$i<=10$i++){

        echo 
"<tr align=\"center\">";

        for (
$e=1$e<=10$e++){

            
$entrada $directorio->read();

            echo 
"<td bgcolor=\"#99CC99\"><img src=\"".$path."/".$entrada."\" width=\"72\" height=\"14\"></td>";

        }

        echo 
"</tr>";

    }

$directorio->close(); 
Asi toma el path relativo al directorio donde esta el script.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #12 (permalink)  
Antiguo 19/09/2003, 14:17
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
Ok, perfecto. Me muestra las imágenes perfectamente. Ahora...

Recuerda que el objeto dir() devuelve dos elementos simbólicos al inicio que no sirven para nada: "." y "..". ¿Cómo hago que no me los imprima cuando hago el echo?
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #13 (permalink)  
Antiguo 19/09/2003, 14:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Te suena algo el "if" ?

Usa un simple IF

Código PHP:
if ($nose !="." || $nose != ".."){
echo 
$nose;

Traducción: .. Si .. no es "." ni ".." .. entonces muestra el valor de $nose ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 19/09/2003, 14:57
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Bueno, el if puede serivir. Pero teniendo en cuenta que esta en un iterador, lo que tieens que hacer es avanzar hasta que despues de esos elementos.

Si son siempre los 2 primeros elementos que devuelve read(), simplemente antes de tus bucles for :
Código PHP:
$path="logos/amor";

$directorio dir($path);

$directorio->read(); // el '.'
$directorio->read(); // el '..''

    
for ($i=1$i<=10$i++){ 
Como son solo 2 pues no uso ni bucle ni nada, es mas rapido (que recuerdos de C).

Si no aparecen en los dos primeros elementos, la solucion es un while():
Código PHP:
        for ($e=1$e<=10$e++){
            
$entrada $directorio->read();
            while(
'.'==$entrada || '..'==$entrada) {
              
$entrada=$directorio->read();
            }
            echo 
"<td bgcolor=\"#99CC99\"><img src=\"".$path."/".$entrada."\" width=\"72\" height=\"14\"></td>";
        } 
Asi te aseguras que funcione si no estan en las 2 primeras posiciones, incluso si no estan seguidos.

Y el while() tambien lo puedes usar en el caso que en esa carpeta tengas subcapertas. Simplemente añade una condicion con is_file() (www.php.net/is_file) o is_dir() (www.php.net/is_dir) para que el while se salte las entradas que sean directorios (o que no sean ficheros). O incluso, si en ese directorio tienes ficheros que no sean imagenes, podiras añadir una condicion en el while() para comprobar que la extension del fichero sea una de las de las imagenes.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #15 (permalink)  
Antiguo 19/09/2003, 15:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues sip, .... ya que son siempre esas dos posiciones .. mejor mover el "puntero" y empezar desplegar esos datos desde ahí ..

(mm en el raiz tambien hay ".." ? lo digo porque en el raiz .. más arriba no podemos subir ..???)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #16 (permalink)  
Antiguo 19/09/2003, 15:40
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
En el raiz no hay "..".

Esto me recuerda a MS-DOS 6.22

;)

Ok, ahora viene algo que nunca logré entender. Ya que avancé un poco... ahora...

¿Cómo pagino el catálogo? El catálogo va a mostrar 100 elementos por página usando el bucle que diseñé... pero mi cabeza no ha podido diseñar un algoritmo para paginar las imágenes.

¿Cómo podemos paginar eso... de tal forma que muestre el resto en las demás páginas?
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #17 (permalink)  
Antiguo 19/09/2003, 18:02
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Pues para comenzar, yo te recomendaria que en lugar de ir mostrando segun los lees del objeto dir, primero recorras todo el directorio metiendo las entradas en un array. Asi sabras cuantas imagenes tiene ese directorio, ademas de tenerlas en un formato mas parecido a un recordset. Y luego solo es aplicar las mismas formaulas que para paginacion de recordset de base de datos.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #18 (permalink)  
Antiguo 19/09/2003, 20:45
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
Bueno, señores. LOGRE PAGINAR !!!

Metí todo en un array y luego mediante bucles hice algunas operaciones y todo bien. Voy a preparlo para ponerlo en las FAQ's.

MIL GRACIAS A TODOS !!!
Gracias php.net !!!
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
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

SíEste tema le ha gustado a 2 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 11:03.