Foros del Web » Programando para Internet » Javascript »

Cerrar un div para siempre

Estas en el tema de Cerrar un div para siempre en el foro de Javascript en Foros del Web. Hola! Gracias por dedicar unos minutos para leer mi problema. El asunto está en que estoy creando una especie de DIV 'sugerencia' es decir, tengo ...
  #1 (permalink)  
Antiguo 11/04/2011, 15:53
 
Fecha de Ingreso: diciembre-2007
Ubicación: Valencia
Mensajes: 113
Antigüedad: 16 años, 4 meses
Puntos: 1
Cerrar un div para siempre

Hola! Gracias por dedicar unos minutos para leer mi problema.

El asunto está en que estoy creando una especie de DIV 'sugerencia' es decir, tengo un div que sugiere a un usuario que utilice una funcionalidad de la web.

Quiero que el usuario tenga dos opciones:

1º Sencillo, al hacer clic denro del div redirige a la funcionalidad (con un simple div hipervinculado)

2º Este es el paso que no se hacer, quiero dar la oportunidad al usuario de no aceptar la sugerencia y poder cerrarla (para siempre, incluso una vez recargado el navegador) haciendo click en un icono de cerrar 'X' y que así, desaparezca el div y el icono de cerrar y que no vuelva a aparecer nunca más.

¿Hay algún modo de hacerlo?

Gracias
  #2 (permalink)  
Antiguo 11/04/2011, 16:44
(Desactivado)
 
Fecha de Ingreso: mayo-2005
Ubicación: España
Mensajes: 471
Antigüedad: 19 años
Puntos: 45
Respuesta: Cerrar un div para siempre

Cita:
Iniciado por juanpons14 Ver Mensaje
Hola! Gracias por dedicar unos minutos para leer mi problema.

El asunto está en que estoy creando una especie de DIV 'sugerencia' es decir, tengo un div que sugiere a un usuario que utilice una funcionalidad de la web.

Quiero que el usuario tenga dos opciones:

1º Sencillo, al hacer clic denro del div redirige a la funcionalidad (con un simple div hipervinculado)

2º Este es el paso que no se hacer, quiero dar la oportunidad al usuario de no aceptar la sugerencia y poder cerrarla (para siempre, incluso una vez recargado el navegador) haciendo click en un icono de cerrar 'X' y que así, desaparezca el div y el icono de cerrar y que no vuelva a aparecer nunca más.

¿Hay algún modo de hacerlo?

Gracias
Ahora mismo lo único que se me ocurre es utilizar AJAX para realizar una petición al servidor al iniciar la carga al tiempo que modificas una variable que será al mismo tiempo una variable global PHP que se almacenará indicando si se marcó la opción,

Se que no me has entendido nada, pero es que ahora no tengo ganas de pensar mucho. Luego te lo explico en profundidad.
  #3 (permalink)  
Antiguo 11/04/2011, 17:35
 
Fecha de Ingreso: diciembre-2007
Ubicación: Valencia
Mensajes: 113
Antigüedad: 16 años, 4 meses
Puntos: 1
Respuesta: Cerrar un div para siempre

Bueno, he intentado entenderte pero no lo hago del todo jaja ^^

Más o menos entiendo lo que quieres decir, pero no sabria como lograr hacerlo. Espero tu respuesta, muchas gracias.
  #4 (permalink)  
Antiguo 11/04/2011, 21:38
(Desactivado)
 
Fecha de Ingreso: mayo-2005
Ubicación: España
Mensajes: 471
Antigüedad: 19 años
Puntos: 45
Respuesta: Cerrar un div para siempre

A ver desarrollemos esta idea:

Al cargar debes averiguar si se ha pulsado el botón de "cerrar" div. Para eso debes hacer una comprobación con una variable global y estática. Las variables Javascript no pueden ser estáticas ya que se reinician cuando se carga la página en el navegador. Así que debes utilizar PHP.

Ahora viene el problema, que al ser PHP un lenguaje de servidor y HTML y Javascript elementos del navegador habrá que idear algún método para intercomunicarlo aunque sea de forma metafórica.

Con PHP

Sabes que con PHP puedes hacer un echo de HTML dentro de las sentencias de comparación (o cualquier otra).

Código PHP:
if (condicion){
ECHO 
ALTERNATIVO
} else {
ECHO 
ALTERNATIVO

Podrías hacer lo siguiente. El enlace del div tendría como destino (index.php?variable=si) se almacena una variable global SESSION que indique esto.

Código PHP:
if (!empty($_GET['variable'])){
$_SESSION['control']="si";
} else {
$_SESSION['control']="no";

Ahora se hace la comparación justo en el punto de la página en el que quieres que aparezca el div. Si existe la variable $_SESSION['control'] y $_SESSION['control'] su valor es si no se escribe nada y si es no se escribe el div.

Código PHP:
if(!empty($_SESSION['control']){
if (
$_SESSION['control']=="si"){

} else {
echo 
"<div>contenido del div</div>";
}

Con AJAX

Es exactamente el mismo proceso, la diferencia es que al pinchar el link no se recarga la página (inconveniente de PHP, por eso se inventó AJAX).

El destino del vínculo será la función javascript que ejecute las sentencias de petición al servidor.

Suponiendo que se haya construido el objeto AJAX.
Código Javascript:
Ver original
  1. function senddata(){
  2. ajax.open("GET","index.php?variable=si");
  3. ajax.send(null);
  4. ajax.onreadystatechange=function(){
  5. if (ajax.readyState==4){
  6. /*  No hay que hacer nada ya que es solo una peticion */
  7. }
  8. }
  9. document.getElementById("divalerta").style.display='none';
  10. }

El vínculo sería:
Código PHP:
Ver original
  1. <a href='#" onclick="senddata()">Cerrar Div</a>


De paso que haces la petición ocultas en tiempo real el div. La próxima vez que recargues la página la variable $_SESSION['control'] estará creada y no se volverá a escribir el div.

Espero no haberme equivocado en alguna parte del código.

Notas
Si quieres hacer el proceso más duradero (la variable session se destruirá tarde o temprano), puedes utilizar un cookie, o sea, en lugar de usar una variable global y comprobar que existe, compruebas que existe el cookie. No obstante si se eliminase el cookie volvería a salir el div. No existe método alternativo.

También podrías hacer una lista de clientes que han pulsado cerrar div guardando su ip y comprobando que la ip del cliente no esté en la lista. Pero eso es tontería, no hace falta complicarse tanto y con ip dinámica (el 80% de usuarios) seguiría siendo una tontería.

El único método eficaz al 100% es que los visitantes estén registrados de alguna forma y hayan iniciado sesión cuando pulsen el div.

Última edición por Rolldi; 11/04/2011 a las 21:51
  #5 (permalink)  
Antiguo 12/04/2011, 10:04
Avatar de alor86  
Fecha de Ingreso: abril-2009
Mensajes: 110
Antigüedad: 15 años
Puntos: 5
Respuesta: Cerrar un div para siempre

has intentado con cookies?
__________________
Cada vez que toco mi código, doy a luz a diez nuevos bugs
  #6 (permalink)  
Antiguo 12/04/2011, 10:09
 
Fecha de Ingreso: diciembre-2007
Ubicación: Valencia
Mensajes: 113
Antigüedad: 16 años, 4 meses
Puntos: 1
Respuesta: Cerrar un div para siempre

No se manejar cookies, aunque supongo que sería lo más acertado. También vi por ahí un script que almacenaba en cache, por lo tanto al recargar no volvia a su estado por defecto.

Probare el sistema PHP y os comento, si alguien sabe hacerlo con Cookies, que lo ponga!

Gracias :D
  #7 (permalink)  
Antiguo 12/04/2011, 15:52
(Desactivado)
 
Fecha de Ingreso: mayo-2005
Ubicación: España
Mensajes: 471
Antigüedad: 19 años
Puntos: 45
Respuesta: Cerrar un div para siempre

PHP en cookies

El mecanismo será el mismo, pero en lugar de crear una variable global se creará y descargará un cookie.

Código PHP:
if($_GET['variable'])){
setCookie("comprobation","yes",time()+20000);

} else{
setCookie("comprobation","no",time()+20000);

Nota: El número 20000 es el número de segundos desde el momento que se crea la cookie que deben pasar para que la cookie expire, puedes cambiarlo a tu antojo.

Ahora se comprueba que exista la cookie y que su valor sea no. En caso de que su valor sea yes o no exista la variable, no se hace nada.

Código PHP:
if(!empty($_COOKIE["comprobation"])){

if(
$_COOKIE["comprobation"]==no){
echo 
"<div>Contenido del div</div>";
}else{
/ * 
No se escribe nada */
}
} else {


Entonces, el link tendrá el siguiente destino: index.php?variable=yes
Está chupado.
  #8 (permalink)  
Antiguo 13/04/2011, 15:53
 
Fecha de Ingreso: noviembre-2005
Mensajes: 426
Antigüedad: 18 años, 5 meses
Puntos: 87
Respuesta: Cerrar un div para siempre

Con cookies eventualmente volverá a aperecer el div en cuestión; si son usuarios registrados lo mejor es que guardes en una base de datos si ya denegó la sugerencia y dependiendo de eso no lo vuelva a mostrar.

Si no son usuarios registrados lo puedes hacer usando la IP del visitante (aunque de esta forma seria mejor usar los 2 metodos, IPS y cookies)
  #9 (permalink)  
Antiguo 13/04/2011, 15:58
 
Fecha de Ingreso: diciembre-2007
Ubicación: Valencia
Mensajes: 113
Antigüedad: 16 años, 4 meses
Puntos: 1
Respuesta: Cerrar un div para siempre

Son usuarios registrados, de hecho quiero mostrarlo cunado un usuario se registra, solo para usuarios registado.

Como podria plantearlo de esta forma?
  #10 (permalink)  
Antiguo 13/04/2011, 16:51
Avatar de alor86  
Fecha de Ingreso: abril-2009
Mensajes: 110
Antigüedad: 15 años
Puntos: 5
Respuesta: Cerrar un div para siempre

CREO QUE LO QUE TE RECOMIENDA InKarC ES LA MEJOR OPCION
__________________
Cada vez que toco mi código, doy a luz a diez nuevos bugs
  #11 (permalink)  
Antiguo 13/04/2011, 19:01
(Desactivado)
 
Fecha de Ingreso: mayo-2005
Ubicación: España
Mensajes: 471
Antigüedad: 19 años
Puntos: 45
Respuesta: Cerrar un div para siempre

Cita:
Iniciado por alor86 Ver Mensaje
CREO QUE LO QUE TE RECOMIENDA InKarC ES LA MEJOR OPCION
No, es lo que recomendé yo primero.

Y también dije que las Ips son dinámicas por lo general y tarde o temprano la cookie expirará o se eliminará manualmente, inclusive la ip cambiará.

Última edición por Rolldi; 13/04/2011 a las 19:07
  #12 (permalink)  
Antiguo 13/04/2011, 19:19
Avatar de Perr0  
Fecha de Ingreso: mayo-2005
Ubicación: Santiago de Chile, Chile
Mensajes: 676
Antigüedad: 19 años
Puntos: 79
Respuesta: Cerrar un div para siempre

Se me ocurre algo, usa una base de datos con usuarios registrados...

jajajjajaja

asi es, considera guardar la info en el servidor si quieres mostrar el mensaje una sola vez.

salu2
__________________
Numerador Mp3 en Access =)
http://www.mediafire.com/download/r9...pdw/mp3(2).zip
  #13 (permalink)  
Antiguo 14/04/2011, 02:30
 
Fecha de Ingreso: diciembre-2007
Ubicación: Valencia
Mensajes: 113
Antigüedad: 16 años, 4 meses
Puntos: 1
Respuesta: Cerrar un div para siempre

Vale creo que ya se como hacerlo.
Lo podria hacer con 'GET'

por ejemplo:
El enlace de cerrar el div será http://url.com/?mostar=no

Entonces if($_GET['mostrar']) {
INSERT INTO tabla (mostrar) VALUES ('no')

Luego simplemente a la hora de mostrar el div Selecciono el campo mostrar de la tabla y si el valor que tiene es SI, se muestra el div, si el valor que tiene es NO, no se mostrara.

Esk he hecho algo parecido hace poco pero para borrar datos. No se me habia ocurrido hacerlo con Base de datos, pensando que quizás era poco eficiente o algo parecido.

Aunque la verdad hacer eso para mostrar o no un div utilizando MYSQL os parece eficiente?
Esk no se mucho de eficiencia la verdad jaja.
  #14 (permalink)  
Antiguo 14/04/2011, 06:36
Avatar de Perr0  
Fecha de Ingreso: mayo-2005
Ubicación: Santiago de Chile, Chile
Mensajes: 676
Antigüedad: 19 años
Puntos: 79
Respuesta: Cerrar un div para siempre

te aconsejo que uses unos y ceros

ocupas un campo TINYINT que pesara 1 byte
http://dev.mysql.com/doc/refman/5.0/...ric-types.html

en comparacion a un CHAR o un VARCHAR que te ocupara entre 3 a 4 bytes respectivamente
http://dev.mysql.com/doc/refman/5.0/es/char.html

claro está que puedes trabajar como tu quieras los unos y ceros

pero por lo general

0 = no = false = disabled = no existe
1 = yes = true = enabled = existe

puede ser indiferente para una base pequeña, pero imaginate ese campo por cada usuario aquí en forosdelweb, (calculando que hay 50.000 usuarios)

como CHAR o un VARCHAR el tamaño de esa columna seria de 120.000 a 160.000 bytes
a diferencia de si fuera TINYINT, sólo ocuparias los 50.000



salu2
__________________
Numerador Mp3 en Access =)
http://www.mediafire.com/download/r9...pdw/mp3(2).zip
  #15 (permalink)  
Antiguo 14/04/2011, 10:39
 
Fecha de Ingreso: diciembre-2007
Ubicación: Valencia
Mensajes: 113
Antigüedad: 16 años, 4 meses
Puntos: 1
Respuesta: Cerrar un div para siempre

Interesante, no tenia ni idea de eso. Algo bueno que he aprendido :D

Ahora ando medio liado, voy haciendo cosas por todos los sitios. Como no sabia hacer esto, pasé a otra cosa.

En cuanto saque un tiempo y lo desarrolle publico aqui el código, por si le sirve a alguien de ayuda.

Gracias a todos ^^

Etiquetas: cerrar, siempre
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 05:15.