Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    53

    Implementazione popup messaggi

    salve vorrei fare delle modifiche alla mia community in php e sono intenzionato a fare in modo che si possano ricevere msg da i vari utenti attraverso l'apertura di un popup in automatico.
    in partica al momento quando sono presenti nuovi msg ho fatto ijn modo che comparisse un testo che avverte della presenza di nuovi msg utilizzando la seguente funzione:
    Codice PHP:
    function nuovi_messaggi($id_utente){
        global 
    $_CONFIG;
        
        
        
    $messaggi mysql_query("
        SELECT id_messaggio
        FROM "
    .$_CONFIG['table_messaggi']."
        WHERE id_destinatario = "
    .$id_utente." AND
        letto <> 'y'
        "
    );
        
        if (
    mysql_num_rows($messaggi)>0){
            
    $risultato "<font color='ff0000'>Nuovi (".mysql_num_rows($messaggi).")</font>";    
        }else{
            
    $risultato "";
        }
        
        return 
    $risultato;

    Questa funzione l'ho modificata in modo da poter estrarre valore S o N stampato in una pagina bianca in base alla presenza o meno di nuovi msg
    Codice PHP:
    function nuovi_messaggi_check($id_utente){
        global 
    $_CONFIG;
        
        
        
    $messaggi mysql_query("
        SELECT id_messaggio
        FROM "
    .$_CONFIG['table_messaggi']."
        WHERE id_destinatario = "
    .$id_utente." AND
        letto <> 'y'
        "
    );
        
        if (
    mysql_query($messaggi)>0){
            
    $risultato "S";    
        }else{
            
    $risultato "N";
        }
        
        return 
    $risultato;

    Attraverso un echo faccio in modo che la pagina di verifica denominata control_newmsg.php
    possa presentare il valore N o S utilizzando questo comando:
    Codice PHP:
    echo nuovi_messaggi_check ($user["id_user"]); 
    Quindi ho fatto un ulteriore file denominato pop_msg.php in cui vado a porre il codice che mi permette di estrapolare i dati realtivi al msg :
    Codice PHP:
    <?
    include_once("log/include/config.php");
    include_once(
    "log/include/auth.lib.php");

    list(
    $status$user) = auth_get_status();

    if (
    $status == AUTH_LOGGED){

    if(
    $user["id_user"]==$_GET["id"]){
        
    $type '1';
        
    $update 'y';
    }else{
        
    $type '0';
        
    $update 'n';
    }
    $prof get_profilo($_GET["id"]);
    ?>
    <?
    if ((isset($_GET["id"])) AND ($messaggi get_messaggi($_GET["id"],$type,$start,$rec_pagina,$update))){

    $messaggi_tot mysql_query("
    SELECT *
    FROM "
    .$_CONFIG['table_messaggi']."
    WHERE "
    .$_CONFIG['table_messaggi'].".tipo <= '".$type."' AND
    "
    .$_CONFIG['table_messaggi'].".id_destinatario = ".$_GET["id"]
    );

    $num_record mysql_num_rows($messaggi);
    ?>
    <?
        
    while ($row mysql_fetch_array($messaggi)){
        
    $data_m explode("-",$row["data_invio"]);
         
    ?>
    <table width="100%" border="0" align="center" cellpadding="4" cellspacing="2" style="margin-bottom:1px;">
            <tr> 
              <td bgcolor="#0099CC" class="cellaheadercommunity"><b class="testoform">Messaggio 
                <? if ($row["tipo"]=='1'){ echo "PRIVATO"; }else{ echo "PUBBLICO"; } ?>
                da:[/b] [url="home.php<?=$link?>&amp;p=profilo&amp;id=<? echo $row["]" class="menu"><? echo $row["username"?>[/url], 
                <b class="testoform">Data: <? echo $data_m[2]."/".$data_m[1]."/".$data_m[0]; ?>[/b]-
                <b class="testoform">Ora: <? $ora_m = print($row["ora_invio"]);?>[/b] 
                <? if ($_GET["id"]==$user["id_user"]){ ?>
                - [url="home.php<?=$link?>&amp;p=scrivi&amp;id=<? echo $row["]" class="menu">RISPONDI[/url
                - <
    a href="home.php<?=$link?>&amp;p=cancella&amp;id=<? echo $row["id_messaggio"]; ?>" class="menu">CANCELLA 
                
    </a>
                <? } 
    ?>          </td>
            </tr>
            <tr> 
              <td class="cellasezioni_letto_<? echo $row["letto"]; ?>"><font style="font-family:Verdana, Arial, Helvetica, sans-serif"><? 
              $text 
    $row["testo"];
              
    $newtext wordwrap($text65"\n"1);
              echo 
    "$newtext\n"?></font></td>
            </tr>
          </table>
    A questo punto nella home della communiti ho integrato queste due funzioni : una per il controllo del valore S o N :
    var xmlhttp

    codice:
    function loadResponseDoc(url)
    {
    	var parameters = "";
    	
    	alert(parameters);
    	
    	url += parameters;
    	
    	alert(url);
    	
    	xmlhttp=null
    	// code for Mozilla, etc.
    	if (window.XMLHttpRequest)
    	{
    		xmlhttp=new XMLHttpRequest()
    	}
    	// code for IE
    	else if (window.ActiveXObject)
    	{
    		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
    	}
    	if (xmlhttp!=null)
    	{
    		xmlhttp.onreadystatechange=state_Change
    		xmlhttp.open("GET",url,false)
    		xmlhttp.send(null)
    	}
    	else
    	{
    		alert("Your browser does not support XMLHTTP.")
    	}
    }
    ed una che una volta verificata la condizione S mi faccia aprire il popup con il contenuto del msg:
    codice:
    function state_Change()
    {
    	// if xmlhttp shows "loaded"
    	if (xmlhttp.readyState==4)
      	{
      		// if "OK"
      		if (xmlhttp.status==200)
      		{  			
      			var response = xmlhttp.responseText;
      			
      			alert(response);	
      			
      			if(response=='S')
      			{
      				window.open('pop_msg.php','toolbar=no,location=no,directories=no,status=no,menub ar=no,scrollbar=no,resizable=no,copyhistory=yes,width='+width+',height='+height+',left='+left+', top='+top+',screenX='+left+',screenY='+top+'');
      			}
      		}
    	  	else
    	  	{
    	  		alert("Problem retrieving RESPONSE data:" + xmlhttp.statusText)
    	  	}
     	}
    }
    la mia domanda è se questa è l astrada da esegurie e se eventualmente ci sono metodi più semplici e diretti per poter effettuare l'invio dei msg attravero popup con contenuto dinamico.

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    53
    beh nemmeno una risposta forse ho scritto delle cavolate pazzesche??????!!!!
    vabbe
    up up up

  3. #3
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    beh il post e' abb lunghetto e sinceramente nn ho letto il codice cmq in linea di max(codice a parte)

    QUando mando un messaggio lo salvi su db OK

    Lato client devi fare un js che con window.setTimeout( funzione , intervallo_in_millisecondi) invia una ajax request ad uno script php che controlla i messagi per il richiedente.

    A sto punto se ci sono nuovi messaggi li invii e, lato client nella funzione di callback dell'ajax, ti gestisci il tutto, per cui se ci sono messaggi si apre il popup oppure se e' gia' aperto ne modifichi il contenuto.

    Per sta roba ti sconsiglio il popup che e' macchinoso da gestire usa piuttosto un pannello interno alla pagina e refreshalo con lajax

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    53
    ciao viru s un po in ritardo ma ho cercato di farmi un ide a riguardo:
    llaora utilizzando un funzione window.settimeout devo fare in modo che questa mi richiami una ajax request beh a dire la verita di javascript ne so poco cmq ho preso qualche spunto online ma fino a questo momento quello che ho trovato mi fa solo fare il redirect ti postol a funzione utilizzata:
    var xmlhttp = false;
    var url = "http://www.****/ajax/ajax_request.php";

    function macheRequest(url)
    {
    var xmlhttp = false;
    {

    try
    {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");

    } catch (e)
    {
    try
    {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

    } catch (e) {}
    }
    }

    if (!xmlhttp)
    {
    alert('Ende Kann keine XMLHTTP-Instanz erzeugen');
    return false;
    }

    xmlhttp.onreadystatechange = alertInhalt;
    xmlhttp.open('HEAD', url, true);
    xmlhttp.send(null);
    }

    function alertInhalt()
    {

    if (xmlhttp.readyState == 4)
    {

    if (xmlhttp.status != 200)
    {
    self.close();
    }
    else
    {
    window.setTimeout(function() { macheRequest(url);}, 1000)
    }
    }
    else
    {
    window.setTimeout(function() { macheRequest(url);}, 1000)
    }
    }

    </script>
    <body>
    <body onload="window.setTimeout(function() { macheRequest(url);}, 1000) ">
    Mi fermo qui solo per procedre a passi se chiaramente sei o siete disponibili ad aiutarmi.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    53
    beh scusate se sto riesumando questo post ma dopo averci rinunciato oggi mi sono rimesso all'opera:
    In pratica utilizzo le seguenti funzioni per elaborare il risultato di una funzione in php che mi controlla la presenza di nuovi msg sul mio db e a seconda della presenza o meno mi stampa a video un carattere So N.
    Fino a questo punto tutto bene.
    Vi posto un po di codice in modo darendere la cosa più chiara.
    La funzione php che mi controlla la presenza di msg letti e non letti è la seguente:

    Codice PHP:
    function nuovi_messaggi_check($id_utente){
        global 
    $_CONFIG;
        
        
        
    $messaggi mysql_query("
        SELECT id_messaggio
        FROM "
    .$_CONFIG['table_messaggi']."
        WHERE id_destinatario = "
    .$id_utente." AND
        letto <> 'y'
        "
    );
        
        if (
    mysql_num_rows($messaggi) > 0) {
            
    $risultato "S";    
            }else{
                    
    $risultato "N";
                    }
        
        return 
    $risultato;
        } 
    Questa funzione la richiamo in un file chiamato condizione_popup.php
    Codice PHP:
    <?php
    include_once("include/config.php");
    include_once(
    "include/auth.lib.php");

    list(
    $status$user) = auth_get_status();

    if(
    $status == AUTH_LOGGED auth_get_option("TRANSICTION METHOD") == AUTH_USE_LINK){
        
    $link "?uid=".$_GET['uid'];
    }else    
    $link '?';

     
    ?>
    <?
    header
    ("Content-type:text/html;charset=iso-8859-1");
    echo 
    nuovi_messaggi_check ($user["id_user"]);
    ?>
    A questo punto nella home della community ho inserito le seguenti funzioni nell'header:

    <script type="text/javascript">
    var xmlhttp
    var link = "<?=$link;?>";
    //alert(link)
    function loadResponseDoc(url)
    {
    var parameters = link + '&update=y';

    //alert(parameters);

    url += parameters;

    //alert(url);

    xmlhttp=null
    // code for Mozilla, etc.
    if (window.XMLHttpRequest)
    {
    xmlhttp=new XMLHttpRequest()
    }
    // code for IE
    else if (window.ActiveXObject)
    {
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
    }
    if (xmlhttp!=null)
    {
    xmlhttp.onreadystatechange=state_Change
    xmlhttp.open("GET",url,false)
    xmlhttp.send(null)
    }
    else
    {
    //alert("Your browser does not support XMLHTTP.")
    }
    }

    function state_Change()
    {
    // if xmlhttp shows "loaded"
    if (xmlhttp.readyState==4)
    {
    // if "OK"
    if (xmlhttp.status==200)
    {
    var response = xmlhttp.responseText;

    //alert(response);

    if(response=='S')
    {
    window.open('pop_msg.php<?=$link?>&amp;id=<?=$user['id_user']?>&amp;update=y','toolbar=no,location=no,directori es=no,status=no,menub ar=no,scrollbar=no,resizable=no,copyhistory=yes,wi dth='+width+',height='+height+',left='+left+', top='+top+',screenX='+left+',screenY='+top+'');
    }
    }
    else
    {
    alert("Problem retrieving RESPONSE data:" + xmlhttp.statusText)
    }
    }
    }

    </script>

    Le funzioni sopra scritte controllano il risultato della pagina condizione_popup.php e se trovano il valore S dovrebbero aprire una popup (che ho chiamato msg.php).
    Quindi nella pagina msg.php inserisco una funzione che mi estrae il msg non letto eventualmente presente.

    Tutta la procedura vorrei che si avviasse ogni tot secondi attraverso l'utilizzo di una funzione che ho chiamato temporizzazione:

    <script type="text/javascript">
    function temporizzazione()
    {
    window.setInterval("loadResponseDoc('condizione_po pup.php')", 1000);
    }
    </script>

    Quindi il tag body della home l'ho modificato in questo modo:

    <body bgcolor="#E6F7FF" onLoad="temporizzazione('loadResponseDoc(condizion e_popup.php)',2000)">

    Ho provato a valutare se tutto funzionasse ma nonostante i vari alert siano risultati esatti non si apre la popup in presenza di nuovi msg.
    Sapreste indicarmi cosa sbaglio?
    Grazie e scusate se sono stato cosi lungo nella mia spiegazione.

  6. #6
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    CIauz ora sono a lavoro e nn ho tempo per controllare bene il codice.

    Cmq, le funzioni ajax che hai messo sono i tutorial e la base di partenza per ogni ajax del pianeta.

    Per gestire il dicorso del popup ti consiglio di gestire la risposta con json .

    Quindi una volta identificati i messaggi puoi rispondere con una stringa del tipo

    in caso di successo
    { "result" : "success" , "data" : { "user" : "nome utente" , "message" : " testo del messaggio" , "date" : "data del messaaggio" } }
    in caso di errore
    { "result" : "error" , "data" : { "code" : "codice di errore"} }
    Nei codici puoi gestire la mancanza di messaggi oppure eventuali errori degli script o/o query.

    Ovviamente devi scaricare il parser json che trovi nel sito linkato sopra e mettere tutto dentro un try catch.
    Io ho la mia lib x ajax e uso quella nel tuo caso ti consiglio d usare mootools/jquery o altre lib gia' fatte.

    .... questo per gestire la risposta appena ho 2 sec guardo meglio il codice che hai messo e vediamo come ti conviene procedere.
    Alla prox ciauz

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    53
    Ciao Virus intanto ti ringrazio per la risposta.
    Beh a dire il vero Json e mototools non li conosco per neinte e anche per quel che riguarda il javascipt mi definisco un pivellino alle prime armi.

    Avevo pensato ad una soluzione più semplice del tipo quella indicata.
    E' un approccio sbagliato?

  8. #8
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    ... ok quindi diciamo che il supporto ajax non lo vuoi usare.

    Per fare la cosa semplicemente a popup devi stare attento perche' la funzione che si dovra' occupare di aprire il popup dovra' anche controllare che l'utente non lo abbia gia' chiuso.

    IO farei un js del genere
    Codice PHP:
    // var booleana per abilitare disabilitare la gestione messaggi
    var loadMessages true;
    // var di contenimento riferimento al popup
    var msgWin null;
    function 
    handleMessages()
    {
          if( 
    loadMessages )
          {
                if( !
    msgWin )
                {
                      
    msgWin window.open("url" "parametri");
                }
                else
                      
    msgWin.location.reload();
                
    // richiama se stessa ogni 10 secondi
                
    window.setTimeout"handleMessages()" 10000 );
          }

    nell'html
    .....
    <body onload="handleMessages()">
    ....

    Ovviamente e' un'idea potrebbe non funzionare e come tte le mattine sto a lavura' se stasera ho un attimo di tempo faccio 2-3 prove e ti mando del codice testato.
    CIauz.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    53
    Credo che una volta aperto non dovrebbero crearsi problemi perche la funzione per la lettura dei msg è impostata in modo tale che una volta letto viene eseguito un update sul campo letto per cui al successivo controllo , a meno che non siano arrivati nuovi msg non letti, non trova il testo "S" nella pagina condizione_popup.php ma bensi "N". quindi a quel punto lo state onchange non verra attivato.
    Ancora non ho testato ti faccio sapere.
    Grazie ancora e buon lavoro.

  10. #10
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    uhmmm secondo me ti stai complicando la vita.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.