私が作成している小さなブログがあります。データベースから情報を取得します。ログインしているユーザーに、他の誰かが新しいコメントを入力したことを表示したいと思います。old_count、new_count、posts の 3 つのページを作成しました。new_count と old_count の両方のセッションを作成し、投稿でそれらを差し引くつもりでした。結果は div でユーザーに表示されます。old_count と new_count の両方が同じ情報を持つため、このアイデアは破棄しました。そのため、投稿の結果は常に 0 でした。私が探しているのは、新しいエントリがある場合に div が表示される Twitter のようなものです- 1 新規投稿 --. 私はこれを行う方法を探しています。誰か助けてください。(注 - 与えられたスクリプトを完全に説明してください....事前に感謝します!!!!)
4 に答える
デビッドによって投稿された提案で、私は以前に尋ねた質問に対する次の解決策を思いつきました。
- ログイン時にタイムスタンプを作成しました。
- 次に、これを使用してデータベースで検索を実行します。
この情報を含むDIVは、10秒ごとに更新され、タイムスタンプリセットページへのクリック可能なリンクです。このページのコードは次のとおりです。
<?php
session_start();
$reset = $_POST['reset'];
if($reset == 'reset')
{
$_SESSION['time_stamp'] = time();
echo "done";//confirmation purpose
}
?>
ショー全体を制御する私のJavaScript:
<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>
最後にコンテンツをチェックしたときのタイムスタンプを設定します。
次に、JavaScript を使用してサーバーをポーリングします (SELECT * FROM 投稿 WHERE created_timestamp > {$last_checked_timestamp}
結果 > 0 の場合、カウントを表示します。
タイムスタンプを更新します。
問題は、コメントが新しいコメントになるのはいつですか? 最新のクリックと現在のクリックの間に作成された場合は? または、ユーザーがまだそれを見ていない場合はどうなりますか?
最も簡単な方法は、「既知の」コメント (ID など) をセッションに保存し、現在利用可能なコメントと照合することです。
ログイン タイムスタンプ ユーザーを保存する必要があります。多分DBまたはセッションにあります。コメントのタイムスタンプと照合してください。データベースに挿入されたすべてのコメントの通知を表示し、次の条件に固執する必要があります
- 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?>);