この記事の概要
- 投稿日:
- 2004年 12月 11日
- 投稿者:
- yu
- カテゴリー:
- レビュー
- タグ:
- プラグイン CommentControl
NP_CommentControlという、一定期間を過ぎたアイテムに対してコメント認証をさせるプラグインをレビュー。試したバージョンは0.23。
スキン・テンプレ変数の解説、コード修正あり。
機能の解説
プラグインwikiのほうにきちんとした解説が見当たらなかったので書いておきます。
プラグインオプション編集画面に、認証条件の設定項目と表示用のテンプレート項目があるのでまずはそちらを設定。文字コードの項目もあります。一方管理画面(クイックメニュー)には設定条件によって引っかかった、認証待ちのコメントが表示される仕組み。"Allow"(承認) "Deny"(却下)のリンクを押して、コメント投稿を載せるか捨てるかを決めます。
次のスキン変数を記述すれば、管理ページだけでなく、実際のページ上で処理することも可能です。
スキン変数
<%CommentControl()%> と個別アイテムページに書けば、承認待ちコメントリストが出せる(管理者のみ見える)。<%CommentControl(warning)%> と個別アイテムページに書けば、上記に加えて承認状況のメッセージも出せる(メッセージはゲストにも見える)。
個別アイテムページ以外の場所に <%CommentControl(pending)%> と書けば、全体の承認待ち件数&クイックリンクが出せる(管理者用)。同じく個別アイテムページ以外の場所に <%CommentControl(url)%> と書けば、承認待ちのRSSリンクを設置できる。
テンプレート変数
<%CommentControl()%> とアイテム部分のテンプレートに書けば、認証待ち表示を出せる(管理者用)。
<%CommentControl()%> とコメント部分のテンプレートに書けば、コメントの編集リンクを設置できる(管理者用)。 カッコ内にテキストを渡せば編集リンクテキストも変更可能。
修正コード
スキン変数の <%CommentControl(warning)%> の挙動がおかしかったので修正コードも下記に載せておきます。ついでにテンプレ変数にコメントの削除機能も追加。
// display warning for non-logged users 以降の、次の部分
if ($member->isLoggedIn())
$strName = $member->getDisplayName();
else
$strName = cookieVar('comment_user');
// warning
if ($this->needsVerification($itemid, $strName)) echo $this->getOption('text3');
これを /* */ で囲ってコメントアウト(無効化)します。 その下に次のコードを挿入。
$query = 'SELECT id FROM ' . $this->table_pending . ' WHERE citem=' . intval($itemid);
$res = sql_query($query);
if (mysql_num_rows($res) > 0) {
echo $this->getOption('text3');
}
コメントの削除リンクを追加。doTemplateCommentsVar() を丸々下記のコードに書き換えます。
function doTemplateCommentsVar(&$item, &$comments, $strLinkText) {
global $member, $manager, $CONF;
if (!($member->isLoggedIn() && $member->isAdmin())) return;
$commentId = intval($comments['commentid']);
if ($member->canAlterComment($commentId)) {
if ($strLinkText) list($strEdit, $strDel) = explode('/', $strLinkText);
if (empty($strEdit)) $strEdit = 'Edit';
if (empty($strDel)) $strDel = 'Del';
echo '[<a href="';
echo $CONF['AdminURL'].'index.php?action=commentedit&commentid='.$commentId;
echo '" target="_blank">'.$strEdit.'</a>]';
echo ' [<a href="';
echo $CONF['AdminURL'].'index.php?action=commentdelete&commentid='.$commentId;
echo '" target="_blank">'.$strDel.'</a>]';
}
}
パラメータに"/"で区切ってリンクテキストを渡せるようにしています("編集/削除"など)。
このサイトではほかにもプラグインが処理を行った場合にコメント認証のヘディング表示(Comments Awaiting Approval)を必ず出すようにいじってたりします。
で、実際の感想は・・・
コメント認証という意味では良く出来てます。勝手にサイトを汚されたくないという目的では成功。けど認証部分を設けても、コメントスパム対策という意味では認証待ちコメントをぽちぽちと消していかなければならない手間は変わりないというのが残念なところです(標準状態に比べればかなりマシですが)。
その解決策として、NP_Blacklistというのが開発中の模様(本家フォーラム)・・次回チェックしてみます。
追記:これはなかなか凄そう!次のスパムを待ってから追ってレポします。
ippo: