¿Cargar fondo aleatorio una vez por sesión?
4 seguidores
Hola a tod@s!, necesito hacer básicamente lo que pone el título, tengo 5 imagenes y quiero que aparezcan de fondo aleatoriamente pero que sólo cambie cuando se inicia una sesión nueva en el navegador y no cuando se refresca la página... (entrar o salir de secciones de la web)
He buscado y rebuscado y no consigo que funcione nada...
La web la estoy realizando en Joomla y tampoco tengo noticia de que exista un componente que haga esto...
Alguien puede contarme algo? la verdad que me urge bastante y sigo sin dar con ello...
Un saludo y gracias de antemano a tod@s!!!
juaroal
¡De nada! Me alegro que te funcione.
¡Un saludo!
alo
Pues efectivamente, funciona con independencia de si se quitan o no los códigos de idioma de las URL...
Una vez mas... gracias!!!! todo funciona perfecto, me salvaste!...
juaroal
Joomla, al igual que wordpress y otros CMS tiene funciones que te devuelven las urls de los diferentes directorios.
Yo no he hecho nada en Joomla pero, en teoría, JURI::root() te devuelve la url del directorio donde está instalado Joomla. Y si a eso le concatenas "/images/nombre_imagen.jpg" te debería crear un link a la imágen independientemente del idioma que esté seleccionado.
El fichero PHP lo dejas igual y antes de la etiqueta de body te abres una linea php así:
<?php $image = JURI::root() ."images/".$_SESSION['bg_rdm']; ?>
Supuestamente estamos guardando la ruta completa a la imágen.
Y en la etiqueta body pones:
<body background="<?php echo $image; ?>">
No sé si te funcionará porque no trabajo con joomla, pero por probar...
alo
Uf perdona no he entendido esta última....
juaroal
Prueba poniendo en la url a la imágen:
<?php $image = JURI::root() ."images/".$_SESSION['bg_rdm']; ?>
<body background="<?php echo $image; ?>">
alo
Hola de nueevo... efectivamente va de perlas... GRACIAS!!
He guardado el php en una carpeta y he hecho un include dentro de index php, después he puesto el código en la etiqueta body... y ya está integrado en la plantilla joomla...
Mi unico problema ahora es que la web es multiidioma y coloca un código en la URL de la siguiente manera... (y esto es por si alguien que sepa de joomla sabe solucionarlo)
..../web/es/index.php para el español
.../web/en/index.php para el inglés
Esto hace que no encuentre las imágenes de fondo ya que si están guardadas en web/images/fondos/mifondo.jpg.... busca en web/es/images/fondos/mifondo.jpg...
En joomla 3 existe la opción dentro del plugin "filtrar idiomas" de quitar el código del idioma de la URL peeeeero sólo me funciona en uno de los idiomas (concretamente el que esté como predeterminado en el sitio)
Por lo demás y si la web no es multiidioma ni rollos de esos tu código funciona a las mil maravillas...!!!!
MIL GRACIAS DE NUEVO!!!
juaroal
Funcionar, funciona. Otra cosa ya es que lo consigas integrar en Joomla.
Ya me cuentas.
alo
???? deja que lo pruebe....
Gracias no....MIL GRACIAS!
juaroal
He hecho y probado este código en local y funciona perfectamente:
<?php
//Función para elegir la imágen
function random_background() {
$img_array[1] = "clouds.jpg";
$img_array[2] = "sun.jpg";
$img_array[3] = "rain.jpg";
$img_array[4] = "autumn.jpg";
srand ((double) microtime() * 1000000);
$random = rand(1, count($img_array));
return $img_array[$random];
}
//Iniciar una sesión.
session_start();
//Seleccionar una imágen y registrarla en una sesión
if(!isset($_SESSION["bg_rdm"])) {
$_SESSION["bg_rdm"] = random_background();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>
<body background="<?php echo $_SESSION['bg_rdm']?>">
</body>
</html>
alo
Uish sip ya he visto anteriormente ese enlace pero aun así, no acabo de dar con ello...
Gracias!!
juaroal
¿Has mirado esto? -> http://stackoverflow.com/questions/11628703/set-random-background-image-once-per-session
alo
Aunque estoy pensando que quizás me he liado y existe una fórmula mucho mas sencilla sin necesidad de meterse en sesiones ni cookies... no? :P
alo
Igual soy un poco pesado, pero no se donde encontrar ayuda para solucionar esto y estoy un poco apretado de tiempo, alguien que pueda hecharme una mano?...
Gracias y un saludo!
alo
He mirado por ahí y puede que con HTML5 Storage se pueda hacer algo...
Hacer un javascript que genere un número aleatorio, lo almacene en el navegador y éste valor se recupere para cargar una imagen...
¿Puede ser que la cosa vaya por ahí?... la verdad que aguna noción tengo pero no soy programador...
Alguien que pueda echarme una mano???
Un saludo!!!
dgordillo
Una vez hice algo parecido... (y creo que fué en una plantilla de Joomla)
pero es PHP + CSS, no es un plugin...
creo recordar que si tienes una carpeta con tus imágenes, usando la función GLOB de PHP, puedes poblar una matriz (array) con el tipo de archivo que quieras (en este caso png, jpg, pero si la carpeta la usas sólo para meter imágenes no te preocupas por esto) Una vez que tienes el array lleno, usas la función shuffle para desordenarlo aleatoriamente, y pillas por ejemplo el primer elemento, que sería el nombre de archivo de una imagen y se lo pones como fondo al body (o a cualquier elemento de la plantilla) con CSS inline, rollo:
< body style="background:url(<?php echo $miArrayDesordenada[0]; ?>) no-repeat 0 0;">
Ahora bien, puedes hacer que se ejecute éste script sólo cuando el usuario se loggee como usuario registrado, se tendría que poner dentro del condicionante:
$ID_del_usuario =& JFactory::getUser();
if( $ID_del_usuario->id != 0 ){
//el usuario se ha identificado, por lo tanto la ID no será 0 o NULL
}
feliper
Hola,
No tengo ni idea de Jommla, no sé como se hace el inicio de sesión, pero en algún sitio debe haber algo como
session_start();
y tu puedes poner tu código justo al lado de esto ... me imagino que Joomla no iniciará una nueva sesión si ya hay una en curso y es justo lo que necesitas.De otra manera tendrías que llevar tú el control sobre las sesiones, guardando una cookie en el cliente o guardandolas tú en una base de datos y cada vez que alguien entra verificas si la sesión es nueva o es una que ya estaba abierta ...
espero que te sirva de algo
Saludos !!