2012-12-19 5 views
5

Ho un piccolo blog che sto creando. Ottiene le sue informazioni da un database. Vorrei mostrare agli utenti che hanno effettuato l'accesso che qualcun altro ha appena inserito un nuovo commento. Ho creato 3 pagine: old_count, new_count, posts. Stavo per creare una sessione per new_count e old_count e sottrarli nei post. Il risultato sarebbe stato visualizzato in un div per l'utente. Questa idea l'ho scartata perché sia ​​old_count che new_count avrebbero le stesse informazioni, quindi il risultato in post sarebbe sempre stato 0. Quello che sto cercando è qualcosa come Twitter dove se c'è una nuova voce, appare un div - 1 nuovo post--. Sto cercando un modo per farlo. Qualcuno può aiutarmi. (Nota: si prega di spiegare lo script fornito per intero .... Grazie In anticipo !!!!)Come mostrare agli utenti che è stato inserito un nuovo commento

+3

AJAX polling o WebSockets o polling lungo. Questo dovrebbe essere un buon punto di partenza. –

risposta

0

Impostare un timestamp dell'ultima volta che hanno controllato il contenuto.

poi, utilizzando JavaScript, interroga il server (SELECT * FROM messaggi DOVE created_timestamp> {$ last_checked_timestamp}

Se risultato> 0 allora conte di visualizzazione.

aggiornamento timestamp.

+0

Potete per favore fornirmi un piccolo esempio di questo? Perché sto vedendo che se ho impostato un timestamp quando ho controllato l'ultima volta, ogni volta che aggiorno la pagina con jquery o ajax, verrà aggiornata anche la marca temporale. Credo!!! Non sono sicuro!!! Per favore, per un campione! – Bryan

+0

Si è corretti riguardo al timestamp che si aggiorna con l'aggiornamento della pagina. Questo dovrebbe essere un comportamento normale, giusto? quando aggiorni la pagina, imposti il ​​nuovo timestampt su NOW e dovresti vedere tutti i post più recenti. Rispondi a questa domanda: visito il tuo sito, vuoi che il mio schermo si aggiorni con nuovi post ogni 2 minuti? O vuoi che visiti il ​​sito e mostri quanti nuovi post dall'ultima volta che ho visitato? –

+0

Voglio che tu sia in grado di leggere i commenti senza che la pagina si aggiorni ogni tanto. Questo è il motivo per cui voglio visualizzare un piccolo div se sono stati inseriti nuovi commenti mentre stavi leggendo il tuo tempo. quando fai clic su questo, verranno visualizzati i nuovi post e l'intera procedura ricomincia. So come aggiornare il div con i contenuti, è la visualizzazione del nuovo messaggio non riesco a ottenere. – Bryan

0

La domanda è: : Quando è un commento un nuovo commento? Se è stato creato tra il clic più recente e il clic corrente? O se l'utente non l'ha ancora visto?

Il modo più semplice sarà quello di memorizzare i commenti "noti" (es. ID) in la sessione e verificare i commenti attualmente disponibili.

+0

Memorizzare un gruppo di ID nella sessione e controllarli rispetto a un altro set sarebbe terribilmente inefficiente se il numero di commenti è un numero significativo. – Samsquanch

+0

@BurninlEO puoi fornirmi un campione di questo? – Bryan

+0

Bene - dovrai comunque recuperare i commenti per mostrarli. Mentre lo fai, puoi scrivere i loro ID in un array. E puoi facilmente confrontare questo array con un altro array memorizzato tramite array_diff(). Per archiviare l'array in una sessione, devi semplicemente fare '' $ SESSION ['commenti'] = $ commenti; '' Se stiamo parlando di <100 commenti con ID intero il sovraccarico è inferiore a 1 KB per utente. Il vantaggio è che puoi mostrare ad ogni utente i commenti che sono nuovi per lui/lei. Se, tuttavia, vuoi solo mostrare la modifica tra i clic, il timestamp sarebbe sufficiente e più efficiente. – BurninLeo

0

È necessario memorizzare l'utente timestamp di accesso. Forse in DB o in sessione. Controllalo in base al timestamp del commento. Bisogna visualizzare le notifiche per tutti i commenti che sono stati inseriti nel database e attenersi a seguenti condizioni

  1. Comment_Timestamp < User_Login_Timestamp.
  2. (CURRENT_TIMESTAMP - Comment_Timestamp) < = Refresh_interval

PHP:

<?php 

/* 
    DB CONNECT AND SQL TO SELECT COMMENTS FROM THE TABLE. YOU CAN OPTIMIZE QUERY TO REDUCE THE NUMBER OF 
    TUPLES 
*/ 

$current_ts = strtotime(date('m/d/Y h:i:s a'); 
$notified = array(); 

foreach($all_comments as $comment) { 
    if(strtotime($comment['ts']) < strtotime($_SESSION['user_login_ts'])) { 
     if(($current_ts - strtotime($comment['ts']) <= REFRESH_INTERVAL) { 
      $notified[] = $comment;  
     } 
    } 
} 

echo json_encode($notified); 

?> 

JS AJAX

setInterval(function(){ 
    $.ajax({ 
     url: "server", 
     success: function(data) { 
      /* Data is the JSON Object for new comments for that user */ 
     }, 
     dataType: "json" 
    }); 
}, <?=REFRESH_INTERVAL?>); 
+0

Ciò significa che se ho, ad esempio, 20 utenti loggati e una persona clicca per vedere il nuovo post, questo imposterà i nuovi post su 1 nel database. Il che mi dice che quando il DIV si aggiorna per gli altri 19 utenti, mostrerà loro 0 nuovi post. Ho ragione? o sto solo indovinando? Nessun sarcasmo inteso da questo – Bryan

+0

Vuoi mettere in relazione i commenti con gli utenti? Quindi, se accedo dopo 1 anno, ricevo notifiche per tutti i commenti che ho perso? O nuovi commenti per un periodo di tempo specifico? – user1190992

+0

Nuovi commenti dopo l'accesso. Tuttavia, la risposta che hai fornito potrebbe interessare gli utenti attuali. Come ho detto, suppongo che lo farebbe. Sono qui perché non lo so ........ così mi dici se ho ragione !!!!! O sbagliato ?! – Bryan

0

con il suggerimento che è stato inviato da David, mi si avvicinò con la seguente soluzione alle domande che avevo chiesto in precedenza.

  1. Ho creato un timestamp all'accesso.
  2. Quindi lo uso per eseguire la ricerca sul database.

Il DIV contenente queste informazioni viene aggiornato ogni 10 secondi ed è un collegamento selezionabile a una pagina di reimpostazione della data e ora. Il codice per questa pagina è la seguente:

<?php 
session_start(); 

$reset = $_POST['reset']; 

if($reset == 'reset') 
{ 
$_SESSION['time_stamp'] = time(); 
echo "done";//confirmation purpose 
} 
?> 

e il mio javascript che controlla l'intero spettacolo:

<script type="text/javascript"> 
<!-- 
$(document).ready(function(){ 
$('#divname').click(function(){ 
var r="reset"; 

$.ajax({ 
type: "POST", 
url: "reset_time.php", 
data: r, 
success: function(html){ 
if(html == 'done') 
{ 
$('#divwithinfo').reload(/*my blog page url*/); 
} 
}); 
}); 
}); 
--> 
</script> 
Problemi correlati