- ベストアンサー
mysqlに更新があった時のお知らせについて
- SNSのようなものでよくメッセージがくると「新着メッセージがあります。」のように表示がされると思うのですが、どのように実装しているものなのでしょうか?
- mysqlでステータスのようなカラムを作り更新されると0から1にステータスを変更、ステータスが1になったものを新着として抽出
- ファイスブックやTwitter、mixiのおしらせは一回クリックして確認すると表示がされなくなります。それならクリックした時にもう一度ステータスを2になるようにして表示しないように・・・とも思ったのですが、そんな面倒なことしているのかと思いどのような処理にするのが適切なのかご質問させて頂きました。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>> ファイスブックやTwitter、mixiのおしらせは一回クリックして確認すると表示がされなくなります。 PHPだけでは実装できません。ページ遷移を伴わずにブラウザ上でいろいろやりたい場合はJavaScriptとの連携が必須です。PHP側ではJavaScriptに対してHTMLではなくJSONという形式で情報を渡し、処理をすべて任せます。 /****************************************************************/ 1. ユーザーがマイページにアクセスする。 2. マイページのHTML内に含まれているJavaScriptから 「Cookieで渡されたセッションIDをもとにログイン中ユーザに対しての新着情報をJSON形式で返す」 PHPスクリプトに対してリクエストがかかる。 3. PHPが新着情報を $notices = array( array('id' => 1, 'message' => 'foo'), array('id' => 2, 'message' => 'bar'), ); のような形で準備する。これが以下のようにしてJSON形式で返される。 header('Content-Type: application/json'); echo json_encode(compact('notices')); 実際のレスポンスは以下のようになる。 {"notices":[{"id":1,"message":"foo"},{"id":2,"message":"bar"}]} 4. JavaScriptでJSONをパースして実際にHTML内に反映させる。 5. ユーザーのクリックをJavaScriptが検知する。 6. マイページのHTML内に含まれているJavaScriptから 「Cookieで渡されたセッションIDとPOSTで渡されたIDに対応する新着情報を既読にする」 PHPスクリプトに対してリクエストがかかる。 7. PHP側で既読にする処理が行われる。 /****************************************************************/ JavaScriptべた書きだとかなり面倒なので、最近ではフレームワークがよく使われます。Googleが開発しているAngularJSが比較的使いやすそうです。私は使ったことないですが… Qiita - AngularJS+PHP+MySQLで簡単な名簿アプリ。ngResourceの練習など http://qiita.com/naga3/items/cacb8182ad79dbbf6e64 【PHPの役割】 ・システムの根幹に関わる骨組み的部分のHTMLを生成して返す ・新着情報などは上記に該当しないためPHPでHTML内に出力させることは行わずに代わりにJSON形式でJavaScriptからのリクエストに対して返す 【JavaScriptの役割】 ・システムの根幹に関わる骨組み的部分のHTMLには一切触らない ・リアルタイム性が重視される且つ持続的でないような情報をPHPが返したJSONをもとにHTML内に反映させる JavaScript側に関しての疑問はそちらのカテゴリで質問なさってください。詳しい方がおられると思います。
その他の回答 (1)
- maiko0318
- ベストアンサー率21% (1483/6969)
それならユーザーごとに設定しなければなりませんから、 クッキーやレジストリーに記憶させることになりますね。 読んだ情報のIDを格納しておけば判断できますね。
お礼
To_aru_User様 詳しい解説ありがとうございました。 しかもカテ違いとは(^^ゞ javascriptはjQueryを通してでしか触ったことがないので、とりあえずは提示していただいたURLなどを見てチャレンジするか決めてみます(笑) とりあえずはPHPでちゃんとプログラムを組めるようになりたいので(笑) ご回答ありがとうございました。