Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/06/2012, 15:14
elgoncho99
 
Fecha de Ingreso: junio-2012
Ubicación: Argentina - Buenos Aires
Mensajes: 135
Antigüedad: 12 años, 5 meses
Puntos: 32
Respuesta: necesito hacer un sistema de avisos con ventana emergente

No crees que seria mejor implementarlo con AJAX y PHP.
Si lo que quieres es que el usuario este navegando tu web y digamos "magicamente" aparezca una venta con algun contenido.
Me parece que la mejor manera es crear un request de AJAX que se ejecute periodicamente cada n segundos y consulte a esa
URL (donde esta tu codigo PHP) esperando una respuesta en XML o JSON o talves tambien HTML.
Y una vez recibida la respuesta disparar una funcion javascript que agregue un div al dom estilo la vetanita que quieres con tu contenido.
Yo soy partidario de hacer pequeños objectos estilo singleton en javascript, pero por ahi pueden implementarlo de otra manera.
Te dejo una idea de como puedes encarar la solucion.
Código Javascript:
Ver original
  1. function $ge(id){return document.getElementById(id);}
  2. var MiAlerta = {
  3.       wsData : {},
  4.       req : {},
  5.       url : "http://www.undominio.com/micodigo-que-devuelve-html.php",
  6.       crearXHR : function ()
  7.       {
  8.             var req = false;
  9.             if( XMLHttpRequest )
  10.             {
  11.                 req = new XMLHttpRequest();
  12.             }
  13.             else if(ActiveXObject)
  14.                 {
  15.                     var versiones = ["MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp"];
  16.                     for(var i = 0;versiones.length;i++)
  17.                     {
  18.                         try
  19.                         {
  20.                             req = new ActiveXObject(versiones[i]);
  21.                             return req;
  22.                         }
  23.                         catch(e){}
  24.                     }
  25.                 }      
  26.             return req;
  27.       },
  28.       doCallBack: function(){
  29.         MiAlerta.req = MiAlerta.crearXHR();
  30.         MiAlerta.req.onreadystatechange = function() {
  31.                 if (MiAlerta.req.readyState==4 && MiAlerta.req.status==200)
  32.                 {
  33.                     var _html = eval('(' + MiAlerta.req.responseText + ')');               
  34.                    
  35.                     $ge('milindoalerta').innerHTML  = _html;
  36.                     $ge('b').style.visibility = 'visible';                 
  37.                     //Volvemos a invocar el ask para que se vuelva a producir el callback
  38.                     MiAlert.ask();
  39.                 }
  40.             }          
  41.             MiAlerta.req.open('GET',MiAlerta.url,true);
  42.             MiAlerta.req.send();       
  43.            
  44.       },
  45.       ask : function(){
  46.         setTimeout(MiAlerta.doCallBack,10000);
  47.       },
  48.       init : function (){
  49.             // Aca puede inicializar lo que quieras con PHP para que quede mas prolijo.
  50.          
  51.       }
  52. };
  53. // Si dispones una clase manejadora de eventos inicializa la pequeña aplicacion al cargar la pagina
  54. Events.addEvent(window,"load",MiAlerta.init());


Este codigo debiera de ir en la pagina donde quieres que aparezca la ventanita magica, recuerda que deberas maquetarla y hacerla invisible. Para que se vuelva visible al mostrarla.

En cuanto al codigo php lo dejaria algo asi.
Código PHP:
Ver original
  1. // Por aca deberias recuperar las variables de session con session_start() o similar
  2.  
  3. $sql="select * from mi tabla order by id";
  4. $res = mysql_query($sql);
  5. $n = mysql_num_rows($res);
  6.  
  7. //INICIAMOS LA VARIABLE SESSION QUE ALMACENA EL TOTAL DE REGISTROS DE LA CONSULTA REALIZADA
  8.  
  9. $_SESSION['total'] = $n;
  10.  
  11. //No habias inicializado tu vairable ultimo_total
  12. if(!isset($_SESSION['ultimo_total']))
  13. {
  14.     $_SESSION['ultimo_total'] = "";
  15. }
  16.  
  17. //EJECUTAMOS EL CONDICIONAL PARA VERIFICAR SI HAY O NO NUEVOS REGISTROS O SOLICITUDES
  18. if($_SESSION['total'] > $_SESSION['ultimo_total']){
  19.     //VALIDAMOS QUE LA VARIABLE SESSION "ULTIMO_TOTAL" NO ESTE VACIA PARA GARANTIZAR QUE NO ES PRIMERA VEZ QUE ENTRA A LA PAGINA DE LO CONTRARIO SI MUESTRA EL MENSAJE DE ALERTA
  20.     if($_SESSION['ultimo_total'] != ""){
  21.         //CALCULAMOS LOS REGISTROS O SOLICITUDES NUEVAS SIN REVISAR
  22.         $total = $_SESSION['total'] - $_SESSION['ultimo_total'];
  23.         //IMPRIMIMOS EL ALERT O LA VENTANA DE NOTIFICACIÓN
  24.         echo "Estimado Usuario, Le notificamos que tiene ".$total." solicitudes nuevas por revisar";
  25.         $_SESSION['ultimo_total'] = $_SESSION['total'];
  26.     }



Espero se halla entendido, saludos