MTCommentTree で表示されるコメントには二つの種類があります。
子の子を孫と言いますが、MTCommentTree では重要ではありません
また、一つのコメントは高々一つの親と、0 個以上の子を持つことができますが、 親を二つ以上持つことは決してありません。 親を持たないコメントは列の一番左に表示され、特にルート(root; 根っこの意味)と呼ばれます。
MTCommentTree プラグインでは、特定のコメントへの返信がされる時、
「どのコメントに対する返信なのか=どのコメントを親に持つのか」という情報を、
コメント投稿欄の URL 欄から判断します。
そのため、URL 欄を本来の目的で使用することはできなくなってしまいますが、
その反面、MovableType 本体に特に改造を必要とすることもなく導入することが可能としているのです。
URL 欄に 1 と入れて投稿されたコメントは コメント 1 を親に持つ、1 の子となります。
また、URL 欄が空欄の場合、投稿されたコメントは親を持たないルートになります。
説明のために 1, 2, 3 ... という数字を使っていますが、実際にはコメント ID を指定します。
<$MTCommentChildRecurse$> が少し理解に苦しまれるかもしれませんが、
この部分には <MTCommentTree> 〜 </MTCommentTree> の部分が、
写し鏡のように繰り返し書かれていると考えてください。
<MTCommentTree> コンテナタグで一つの親と子が、
どのように HTML に表現されるかを書いておくことで、
親と子、子と孫、孫と曾孫…という関係でも再帰的に扱うことができます。
type=hidden)フィールドに置き換えます。
また、ブラウザの Cookie から、 以前に入力された URL をフォームに自動設定する処理があるので、こちらも消しておきます。
このままでは URL 欄が見えないので、ユーザが値を入力することができません。
そのため JavaScript を使って、返信したいコメントをクリック一つで指定できるようにしてみます。
例えばコメント毎に"このコメントに返信する"といったようなリンクを用意しておき、
リンクがクリックされると、親コメントを URL フィールドに設定する、という処理を追加します。
そして、コメント毎に"このコメントに返信する"というリンクを作るため、 MovableType のエントリアーカイブテンプレートを編集します。
これで、コメント毎に用意されたリンクをクリックすると、
JavaScript 関数 ReplyTo によって コメント ID が URL フィールドに設定されます。
そして、この状態で投稿されたコメントは親子関係を持って表示されることになります。
この段階で、返信コメントを投稿する基本的な部分の改造は全て終わりました。
しかしこれを使ってみると気が付かれると思うのですが、
何れかのコメントにある"このコメントに返信する"のリンクをクリックしても画面には一切変化がありません。
そのため、書いているコメントがどのコメントへの返信であったのかだとか、
間違ってリンクをクリックしてしまったために予期せぬコメントが付いてしまったり…と云った事故(?)を防げません。
先の改造で返信先コメントを分りやすくすることはできましたが、
間違って"返信する"リンクをクリックしてしまった場合には、二度とルートコメントを投稿できません。
また、"返信する"リンクを次々とクリックすると、背景の色が変わったまま残ってしまいます。
MTCommentHasChild、MTCommentHasNoChild、MTCommentIsRoot
と云った条件タグが用意されていますので、ルートコメントにのみアイコンを表示したり、
子コメントが無い場合でデザインを変えたり、と云ったカスタマイズも可能です。
コレ!と云った具体例が挙げられないのですけれど(^^;
寄せられたコメント (最新 5 件を表示しています)
あああああ、すいませんすいません、わざわざのエントリ立てありがとうございます。
これでうちの掲示板(の代わりのエントリ)をもう少しそれっぽくすることができそうです。
次のおやすみにでもチャレンジしてみます。
ありがとうございました。