タイトル長いよ。
まあ、それはともかく。MovableTypeのコメントスパムを防ぐための有力なプラグインとして「MT-Keystrokes」があるわけですが(どういうものかは過去の記事を参照のこと)、これをダイナミックパブリッシングで使おうとする場合にやっておかないといけないことがあるので、ここでまとめておきます。以下、MT-Keystrokesはバージョン0.1.5、MovableTypeはバージョン6.xであると仮定して話を進めます。
調べてみると、過去の記事で張ったリンク先も古くなってたどれなくなりつつあるようなので(何しろ10年前にリリースされたプラグインですから)、改めてパッケージの入手方法から解説します。
まず、MT-Keystrokesのバージョン0.1.5は、以下のURLから取得できます。
http://overstated.net/projects/mt-keystrokes/keystrokes-0.1.5.tar.gz (tar.gz形式)
http://overstated.net/projects/mt-keystrokes/keystrokes-0.1.5.zip (zip形式)
なぜ直接リンクを張らないかというと、これらは公式ページの裏に置いてあるファイルだからです。というか、公式ページでは0.1.5と言いながらなぜか0.1.4へのリンクになっているので、こういう取得方法をとらざるを得ないのです。
で、取得できたらtar.gzなりzipなりを展開します。すると、2つのファイルが見つかるはずです。
plugins/keystrokes.pl
php/plugins/function.MTKeystrokes.php
まずは、keystrokes.plから。ぶっちゃけ、MovableTypeのバージョン6だとこのファイルはそのままでは使えません。エディタで直すべき箇所が2つあります。
1.66行目を
return 1 unless $MT::VERSION =~ m(^3\.);
↓
return 1 unless $MT::VERSION =~ m(^6\.);
と書き直します。
2. 92行目を
$eh->error(“keystroke id: ” . $obj->blog_id);
↓
# $eh->error(“keystroke id: ” . $obj->blog_id);
とコメントアウトします。
ちなみに1つめはバージョン6に対応するためで、2つめはコメントが投稿できなくなるバグを回避するためです。
で、書き直したkeystrokes.plをMT/pluginsに置きます。このファイルはこれでOKです。
次のfunction.MTKeystrokes.phpも、実はこのままでは使えませんので直しを入れます。
まずエディタで開いて、26行目を
function smarty_function_MTKeystrokes($args) {
↓
function smarty_function_mtkeystrokes($args) {
と書き直します。そうしたらエディタを閉じて、今度はファイル名を
function.MTKeystrokes.php
↓
function.mtkeystrokes.php
と変更します。これは、MovableTypeのバージョンアップに伴う仕様変更に対応するためです。いつからこういう仕様になったのかはよくわかりませんが、こちらの記事を見ると2011年にはすでにそうなっていたようです。
で、名前を変更したこのファイルはMT/php/pluginsに置きます。これでプラグインの配置は完了です。
続いて、テンプレートの編集を行ないます。この辺は公式ページの方にも説明があるのですが、何しろ英語のページなので、ここでも念のために説明しておきます。
[2016/5/5 追記]
MovableType6.2.4で、コメント関係のテンプレートモジュールの構造が変更されました。
6.2.4以降では、テンプレートモジュールの「コメント入力フォーム」に対して以下の編集を行なってください。
(これを知らずに6.2からバージョンアップしたところ、コメントのテンプレートモジュールの変更が初期化されてしまい、コメントができない状態に陥ってしまいました……。皆さま、どうぞご注意ください。)
まず、テンプレートモジュールの「コメント」を編集します。変更点は3つあって、
1.formタグの直下に<$MTKeystrokes$>というタグを挿入します。
<form method=”post” action=”<$mt:CGIPath$><$mt:CommentScript$>” name=”comments_form” id=”comments-form” onsubmit=”return mtCommentOnSubmit(this)”>
<$MTKeystrokes$>
<input type=”hidden” name=”static” value=”1″ />
2.textareaタグにonkeypress属性を追記します。
<textarea id=”comment-text” name=”text” rows=”15″ cols=”50″ onfocus=”mtCommentFormOnFocus()” onkeypress=”keystrokes(this.form)”></textarea>
3.「投稿」のinputタグにonclick属性を追記します。
<input type=”submit” accesskey=”s” name=”post” id=”comment-submit” value=”投稿” onclick=”keystrokes(this.form)” />
以上3つの変更を行なったら、テンプレートを保存します。
続いて、システムテンプレートの「コメントプレビュー」を編集します。このテンプレートにも、テンプレートモジュール「コメント」と同じくformタグ、textareaタグ、「投稿」のinputタグがあるので、同じように編集します。編集が終わったら、テンプレートを保存します。
以上で、準備は完了です。ふう。
念のために、どこかの記事にコメントを投稿してみて、ちゃんとコメントがつくか確認をしましょう。
……いやぁ、疲れました。ダイナミックパブリッシングにしたらどうしてMT-Keystrokesが動かなくなったのか、原因を突き止めるまでどれだけネットを駆けずり回ったことか。そう、PHPのプラグインでの関数名とファイル名を小文字に直さなきゃいけないところを調べるまで、ものすごく時間がかかりました。何しろ古いプラグインである上に、あまりやってる人がいないダイナミックパブリッシングでの症状なので、非常に情報が少ないんです。情報の断片を集めていって、ようやく解決することができました。
いやぁ、本当に疲れた……。
まったく、下手にMovableTypeに手を出してしまったおかげで、すいぶん苦労させられました。WordPressだと、もっと扱いが楽なのかなぁ。今度暇があったら、MovableTypeとWordPressのどっちがいいのか、考えてみたいと思います。
もうブログ周りに手を入れるのはこれでおしまい。日付回って今日からは、いよいよカーネル再構築に着手します。