Tengo un sitio en construcción y pensé que sería buena idea poner una imagen de fondo que cambie por cada carga, comparto aquí la función, no es nada de otro mundo pero quizás le sirva a alguien.
Lo que hace esta función es leer todos los nombres de los archivos que están en la carpeta dada y retorna uno al azar.
<?php
function imagenAlAzar($ruta = 'imagenes') {
$fotos = scandir($ruta, 1); // Extrae todas los archivos que están en la carpeta $ruta.
$cantidad = count($fotos) - 3; // Elimina los puntos '.' y '...'.
return $ruta '/' . $fotos[rand(0, $cantidad)]; // Selecciona una foto al azar del arreglo fotos.
}
?>
<html>
<head>
<title>Mi Banner</title>
</head>
<body>
<h1>Mi Banner</h1>
<img src="<?php echo imagenAlAzar() ?>" alt="banner" />
</body>
</html>
Falta comprobar si el archivo es realmente una imagen, pero tengo sueño.
Postear en Twitter
Postear en Facebook
Feed RSS
Agregar a Favoritos
roro89 el 27 de Enero del 2011:
0
La gracia es que si luego se suben nuevas imágenes o se eliminan no hay que hacer nada más, scandir se encarga automáticamente de escanear el directorio.
Diego Escares el 27 de Enero del 2011:
0
Lindo y simple código :)
Daniiel el 10 de Febrero del 2011:
0
Ok pero como funciona ? si pudieras explicarte mejor ¿como funciona el codigo? ¿hay que cambiarle algunas palabras? (= Bueno si pudieras explicarme por que la verdad no entendi xD es que soy novato en esto espero que respondas Salu2
roro89 el 11 de Febrero del 2011:
+2
Hola! es que en realidad puse todo mezclado, no sé que nivel tienes, así que trataré de explicar como si recién conocieras html :)
Supongamos que quieres poner una imagen, entonces con html común uno pondría:
(supón que el archivo se llama mi_codigo.php)
<img src="ruta_de_la_imagen" />
Donde ruta_de_la_imagen es la ruta de donde está la imagen, supongamos que tienes ese código html una carpeta llamada "proyecto", y dentro de esa carpeta tienes otra llamada "imagenes"
proyecto/mi_codigo.php
proyecto/imagenes/
Ahora pones una imagen dentro de la carpeta imagenes, supón que se llame "dibujo1.jpg".
proyecto/imagenes/dibujo1.jpg
entonces para llamarla dentro de mi_codigo.php uno pondría:
<img src="imagenes/dibujo1.jpg" />
Ahora ¿Qué pasa si tengo 20 o 200 imagenes distintas en la carpeta "imagenes" y quiero que se seleccione una al azar? Esa es la gracia del código que compartí. Lo que debería cambiar sólo es la ruta src, por lo que pongo una función en php llamada "imagenAlAzar()", (si quieres cámbiale el nombre :p
<img src="<?php echo imagenAlAzar() ?>" />
Lo bueno de PHP es que se puede poner directamente dentro del código html, dentro de <?php ?>.
"echo" es para imprimir en pantalla (http://php.net/manual/es/function.echo.php)
Ahora sólo falta construir la función imagenAlAzar(),
function imagenAlAzar($ruta = 'imagenes') {
// código.
}
la función recibe un parámetro $ruta, si no se pasa ese parámetro toma el valor de 'imagenes', que es la ruta a la carpeta de donde extraer las imagenes.
Luego dentro:
Scandir (http://php.net/manual/es/function.scandir.php) devuelve un arreglo con los nombres de todos los archivos que están dentro del directorio dado. Por omisión se ordenan alfabéticamente, si se le pasa un 1 se ordenan al revés.
$fotos = scandir($ruta, 1);
count (http://php.net/manual/es/function.count.php) cuenta la cantidad de elementos del arreglo (array en inglés). A esa cantidad le resto 3 porque contiene un punto '.' y '...' que son directrices de directorios, es decir, no son importantes.
$cantidad = count($fotos) - 3; // Elimina los puntos '.' y '...'.
Luego selecciono la imagen, los arreglos son estructuras primitivas de datos, en PHP son un poco más poderosos, puedes leer más en http://php.net/manual/es/language.types.array.php
Entonces, selecciono una foto al azar con rand(0, $cantidad) << número al azar entre 0 y $cantidad.
$miFoto = $fotos[rand(0, $cantidad)];
Finalmente formo la ruta "imagenes/" + "nombre de la imagen" y la retorno.
return $ruta . '/' . $miFoto.
Por lo que queda:
function imagenAlAzar($ruta = 'imagenes') {
$fotos = scandir($ruta, 1);
$cantidad = count($fotos) - 3;
$miFoto = $fotos[rand(0, $cantidad)];
return $ruta . '/' . $miFoto.
}
En resumen, no hay que cambiar nada, sólo depende de cómo estén ordenados tus directorios, si la carpeta no se llama 'imagenes', sino 'banners' y está en 'cosa/banners', llamas a la función como imagenAlAzar(cosa/banners)
Saludos.
Diego Escares el 15 de Febrero del 2011:
+1
¡Qué respuesta! +1
linexteria hace 7 meses:
0
muy bueno el code, y sí scandir se encarga de todo, creo que es la matríz de este code..
saludos
iluzbel hace 6 meses:
0
Muy bueno, hace tiempo que lo buscaba +1
¡Amigo! te demorarás 10 segundos en crear tu cuenta.
Disfrutarás de todos los beneficios de DocumentoWeb.