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
risposta
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.
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
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? –
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
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.
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
@BurninlEO puoi fornirmi un campione di questo? – Bryan
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
È 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
- Comment_Timestamp < User_Login_Timestamp.
- (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?>);
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
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
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
con il suggerimento che è stato inviato da David, mi si avvicinò con la seguente soluzione alle domande che avevo chiesto in precedenza.
- Ho creato un timestamp all'accesso.
- 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>
- 1. Impossibile aggiornare oggetto che non è mai stato inserito
- 2. Come saprò che il record è stato duplicato o è stato inserito con successo?
- 3. iOS Come consentire agli utenti di registrare un account/Come fare un database di utenti
- 4. Il mio approccio per dare accesso agli utenti è corretto?
- 5. TreeView VB.NET - selezionando dinamicamente un nodo dopo che è stato inserito o spostato?
- 6. c'è un modo per avere la barra di progresso di mysqldump che mostra agli utenti lo stato dei loro backup?
- 7. Come identificare quale dispositivo è stato inserito nello slot USB?
- 8. Come distribuire Python agli utenti di Windows?
- 9. Come posso verificare se session_start è stato inserito?
- 10. Oracle - restituisce il nuovo valore chiave inserito
- 11. Estendere il pacchetto agli utenti di mean.io
- 12. Verificare che il record sia stato inserito correttamente in Symfony2
- 13. Sicurezza che consente agli utenti di utilizzare caratteri jolly
- 14. agli utenti di selezionare che hanno downvoted ma mai upvoted
- 15. È possibile utilizzare FindBug per contrassegnare il codice che utilizza un metodo che è stato inserito nella lista nera?
- 16. È [---] un commento in .gitconfig?
- 17. È sicuro consentire agli utenti di modificare i CSS?
- 18. Come distribuire gli aggiornamenti agli utenti dell'app Android pagata preinstallata?
- 19. Come posso configurare un repository GitBlit che impedisce agli utenti di spingere?
- 20. Come faccio a rendere alcuni attributi accessibili solo agli utenti che hanno un ruolo specifico?
- 21. Instagram Sandbox Inviti agli utenti mai ricevuti
- 22. Permettere agli utenti di cancellare i propri commenti in Django
- 23. Teach Notepad ++ per piegare un nuovo commento multilinea (R)
- 24. Django - lasciando messaggi agli utenti (offline) usando il nuovo framework dei messaggi
- 25. Permettere agli utenti di scegliere un tema personalizzato in Rails
- 26. Come posso aggiungere utenti al builder inMemoryAuthentication dopo che è stato creato?
- 27. Come consentire agli utenti di eseguire codice Ruby arbitrario?
- 28. OSX: come "mostrare" un elemento della barra di stato?
- 29. come impedire agli utenti di chiudere una finestra in javascript?
- 30. Come notificare agli utenti l'aggiornamento di un'app Android?
AJAX polling o WebSockets o polling lungo. Questo dovrebbe essere un buon punto di partenza. –