本文へジャンプする
カテゴリー選択 »
全てを表示
Tips
その他
スキン
ピックアップ
プラグイン
レビュー
レビューのタグ一覧 »
一覧を開閉する
プラグイン
Blacklist
スパム
javascript
ハック
TrackBack
JSEncode
ProtectByMD5
メールアドレス
HideCommentMailAddr
クロスドメイン
SQLite
MixiAddDiary
mixi
CommentControl
GZip
CommentLink
« NP_GZip を試す
NP_Blacklist (alpha) レビュー »

ブログツール、NucleusCMSに関する情報を掲載

[引っ越しました] 過去記事を datoka.jp/old にまとめてます。
ブログだとか
Nucleusだとか
制作物だとか

この記事の概要

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:

こちらを参考にコメントスパム対策をさせていただきました。勝手ながら TrackBack させていただきました。

yu:

ども、ご報告ありがとうございます2>ippoさん

ippo:

喜ぶべきか悲しむべきか、早速効果が現れました。

yu:

おやおや。

majin:

はじめまして

こちらのプラグインを使用した場合に
一定期間過ぎた記事 ではなく
必ず可否判断 したい場合は daysを0に設定すればよいでしょうか。
やってみたんですが期待通りの動きではありませんでした。

もし設定項目ありましたらお知らせいただけないでしょうか。
よろしくお願いします。

yu:

そのような設定でOKのような気がしますが・・
ブログを動かしてるサーバー時間の誤差とかありませんか?(海外サーバの場合など)
・・・と思ったんですが、別にこの場合は関係なさそうですね。

トラックバック一覧

[Trackback] 転んでしまいました………

★一昨日にスパム対策をとっておいたのですが、早速ブラックリストをすり抜けてスパムがやってきました。しかも、ご丁寧にも一時間毎に古い日記順に一つずつ。(汗)  そこで再び、yuさんのサイトを参考にして(...

[Trackback] コメントスパム

で、対策を探してみました。 こちらからリンクされている NP_CommentControl レビュー と NP_Blacklist (alpha) レビュー を参考に対策してみました。 効果のほどはこれからですが、参考にさせていただいた方々...

[Trackback] こんどはコメントスパムかい(--;)

 今回は、疑問の余地なく、業者が全自動でやっているコメントスパムです。  昨夜21:00過ぎから、どこぞのオンラインカジノを宣伝する(英語の)コメントスパマーに捕捉されてしまいました。  記事番号1番から順...

[Trackback] コメントスパム

未だ、コメントスパムの被害にはあっていないが、Nucleus環境でも被害が出始めているもよう。 こういったものは事前の対策がよいと思われるので、以下のものを導入した。 NP_CommentControl <参照> NP_CommentContr...

関連がありそうな記事一覧

ページの先頭に戻る