CMSのポテンシャルを引き出す─MODxで作る商用サイト

第18回 MODxとコメント投稿機能

この記事を読むのに必要な時間:およそ 10 分

お知らせ

気温の差が激しく,衣服にも気を使う季節になりましたが,皆さん体調管理は万全でしょうか?

今回は,最初になかみつ園生姜紅茶を宣伝させてください。

IT系の皆さんにとってお茶とは馴染みの薄いものかもしれませんが,特に寒くなる季節に女性を中心に人気なのが生姜紅茶です。奥さんやご両親へのプレゼントなど,ぜひ検討してみてください。注文時に「gihyo.jpを見た」とコメントいただければオマケがつくようになっていますので,この機会に是非。

MODxにおけるコメント投稿機能

今回は,MODx上でコメントの投稿,表示機能を行うためのQuipというスニペットを紹介します(とはいっても,なかみつ園では執筆時点で導入していないのですが…)⁠

QuipとはMODx Revolutionの中では比較的メジャーなスニペットであり,⁠システム」⁠⁠パッケージマネージャー」よりパッケージのダウンロード画面に進むと,ダウンロードランキングの上位に位置しているスニペットです。

動作イメージとしては,皆さんがご覧いただいているこのページの下部を見ていただくのが一番です。以前紹介したように,gihyo.jpではMODx-1.0系が使用されているため,Quipとは異なるスニペットが使用されているはずですが,Quipを使用することで下記のような機能を実現できます。

  • サイト全体や任意のページにコメント機能を付加できる
  • モデレート機能
  • 日本語や任意の表示
  • コメントの削除などはMODxの管理画面から操作可能

それではさっそく設定を行ってみましょう。

Quipのインストールと基本的な設置

Quipは従来のように,パッケージマネージャーより導入しますが,インストール画面では,これまでのスニペットと異なり,簡単な初期設定が要求されますので,モデレーションなどに使用されるメール関連の設定をさくっと行なっておきましょう。これらの値は,後々「システム設定」より変更することが可能です。

図1 メールアドレスの設定

図1 メールアドレスの設定

導入テストを行う前に,気になることがありませんか?このスニペットは,これまで紹介してきた一連のスニペットと異なり,ユーザからのデータを取得し,HTMLとして表示します。実際のコメントはデータベース内でどのように管理されているのでしょうか?

  • 各リソースに埋め込まれる?
  • それとも専用のテーブルに保存される?

答えは,スニペットインストール後のMySQL内の様子を見ると一目瞭然です。投稿されたコメントなどはmodx_quip_commentsといった専用のテーブルに格納されるようになります。これがわかれば,後々コメントをphpMyAdminのようなツールで編集することも簡単ですね。

MySQLデータベース内の様子

mysql> show tables; 
-- 略 --
| modx_quip_comment_notify           | 
| modx_quip_comments                 | 
| modx_quip_comments_closure         | 
| modx_quip_threads                  | 
-- 略 --

それでは,例のごとくスニペットのドキュメントを見ながら,まずは最低限のパラメータを使ってスニペットの設置を行ってみましょう。今回は,⁠生姜紅茶】という商品ページリソースのフッターに近い部分に次の2行を追加してみました。1行目は既存コメントの表示に使われるスニペット,2行目はコメントの投稿フォームとして使用されるスニペットです。

<p>[[!Quip? &thread=`shogakocha` &threading=`0`]]</p>
<p>[[!QuipReply? &thread=`shogakocha`]]</p>

実際のページは次のようになります。

図2 コメント機能が追加された様子

図2 コメント機能が追加された様子

このように,コメント機能が数分で設置できるのは素晴らしいのですが,現状では投稿制限がないため,spam投稿の格好の餌食となってしまいますし,日本語サイトなのにコメント部分は英語表示,という微妙な状態になっていますので,まずは実用的なレベルになるまでカスタマイズしていきます。

スレッド名をエイリアスにする

コメント受付可能なページが複数存在する場合,全てのページにユニークなスレッド名を与えるのは大変ですので,MODx変数を使って楽をしてみましょう。具体的には,スニペットのコールを次のようにします。

リスト1 MODx変数を利用してスニペットのコール

[[!Quip? &thread=`[[*alias]]` &threading=`0` ]] 
[[!QuipReply? &thread=`[[*alias]]`]]

この形式であれば(エイリアスの重複がない限り)どのページにもコピー&ペーストが可能なので,ずいぶん構築の手間を省くことができると思います。また,常に最新の情報を表示する必要があるコメント表示部分と異なり,コメント投稿部分ではキャッシュを使用しても問題がないことが多いため,必要に応じて

[[QuipReply? &thread=`[[*alias]]`]]

という書式でキャッシュを有効にしておきましょう。

著者プロフィール

中満英生(なかみつひでお)

大学時代に出会ったSolarisがきっかけでUNIXの世界へ。その後ホスティングプロバイダ,データセンターで実務経験を積む傍ら,雑誌記事の執筆や技術セミナーの講師を務める。サーバ設定の他,セキュリティに関する著作や技術者エッセイも執筆経験あり。

コメント

コメントの記入