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 originalfunction $ge(id){return document.getElementById(id);}
var MiAlerta = {
wsData : {},
req : {},
url : "http://www.undominio.com/micodigo-que-devuelve-html.php",
crearXHR : function ()
{
var req = false;
if( XMLHttpRequest )
{
req = new XMLHttpRequest();
}
else if(ActiveXObject)
{
var versiones = ["MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp"];
for(var i = 0;versiones.length;i++)
{
try
{
req = new ActiveXObject(versiones[i]);
return req;
}
catch(e){}
}
}
return req;
},
doCallBack: function(){
MiAlerta.req = MiAlerta.crearXHR();
MiAlerta.req.onreadystatechange = function() {
if (MiAlerta.req.readyState==4 && MiAlerta.req.status==200)
{
var _html = eval('(' + MiAlerta.req.responseText + ')');
$ge('milindoalerta').innerHTML = _html;
$ge('b').style.visibility = 'visible';
//Volvemos a invocar el ask para que se vuelva a producir el callback
MiAlert.ask();
}
}
MiAlerta.req.open('GET',MiAlerta.url,true);
MiAlerta.req.send();
},
ask : function(){
setTimeout(MiAlerta.doCallBack,10000);
},
init : function (){
// Aca puede inicializar lo que quieras con PHP para que quede mas prolijo.
}
};
// Si dispones una clase manejadora de eventos inicializa la pequeña aplicacion al cargar la pagina
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// Por aca deberias recuperar las variables de session con session_start() o similar
$sql="select * from mi tabla order by id";
//INICIAMOS LA VARIABLE SESSION QUE ALMACENA EL TOTAL DE REGISTROS DE LA CONSULTA REALIZADA
$_SESSION['total'] = $n;
//No habias inicializado tu vairable ultimo_total
if(!isset($_SESSION['ultimo_total'])) {
$_SESSION['ultimo_total'] = "";
}
//EJECUTAMOS EL CONDICIONAL PARA VERIFICAR SI HAY O NO NUEVOS REGISTROS O SOLICITUDES
if($_SESSION['total'] > $_SESSION['ultimo_total']){
//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
if($_SESSION['ultimo_total'] != ""){
//CALCULAMOS LOS REGISTROS O SOLICITUDES NUEVAS SIN REVISAR
$total = $_SESSION['total'] - $_SESSION['ultimo_total'];
//IMPRIMIMOS EL ALERT O LA VENTANA DE NOTIFICACIÓN
echo "Estimado Usuario, Le notificamos que tiene ".$total." solicitudes nuevas por revisar";
$_SESSION['ultimo_total'] = $_SESSION['total'];
}
Espero se halla entendido, saludos