Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/04/2011, 21:38
Rolldi
(Desactivado)
 
Fecha de Ingreso: mayo-2005
Ubicación: España
Mensajes: 471
Antigüedad: 19 años, 5 meses
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