「いいね」というのは、記事が獲得した評価、というものと、読者自身がこの記事をよかったことを記録にとどめることの2つの機能があります。
副次的な機能として その評価をシェアする、ということがありますね。
つまり、記事単位で 「いいね値」を加算していくことと、
読者単位で どの記事に 「いいね」をつけたか、ということの2つのデータ管理が最低限必要になります。
(そのうえで、同一人物が 記事に「いいね」をいくつもつけていいのか、などの制約条件があるでしょうね。)
今回は、ログイン管理をしないということなので、一応サーバ側からはユーザ認識ができないものと
考えます。そうすると、1つの方針としては次のようなものになるでしょう。
-
記事ごとにIDを振ります。一意になるようにしましょう。
-
読者は自分のローカルで どの記事に いいねをつけたか管理します。のちのち再度記事を読んだとき、自分が前に「いいね」をつけたこと、そして2度目は押せないようにすること、などをローカルで管理します。
-
サーバは、読者が「いいね」ボタンを押したタイミングで、記事単位でのいいね値を加算する処理を行います。このとき、トランザクション処理して取りこぼさないようにします。
-
データが管理できれば、あとは 記事ID で いいね値を取得して 画面に表示。クライアント側では 記事IDたちをみて、クライアント側dbで、自分が 過去「いいね」をつけたか確認して ブラウザで表示を切り替える。とやればOKですね。
では 実際の技術的にはどう実現するか、ですが、
-
のデータ管理の部分には IndexedDB か localstorage を使うのがよいでしょう。一番簡単には localstorageですが、きちんと管理するには 前者がいいですね。IndexedDBそのものを使うのが敷居が高ければ PouchDBというライブラリが簡単にJSON形式で管理できて楽できますよ。
-
には いろんなものでできますね。トランザクション処理と書いてしまったのですが、MySQLみたいに きちんとRDBにする必要もないかもしれませんね。利用者が多くなければ CouchDB でも十分かもしれません。そんなに難しいことではありませんよ。
-
現状のCGIをそのままにしたいなら、いいね値のサーバからの取得は AJAXで別建てで取るのも一つの手です。現在 表示しようとしている 記事ID(記事ID達) を 送って いいね値を返すだけのサービスを作ってAJAXでとってやるような実装です。
とこんな感じでしょうか。特に難しい点はないのでチャレンジしてみてください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/05/14 15:25