この記事の内容は、時間経過およびプログラムやシステムのバージョン アップなどの事情によって、現状に正しくそぐわない内容、またはそれどころか、場合によっては問題を引き起こす可能性があります。参考程度に留め、関連記事やアーカイブを検索してみてください。
そこで今回、MovableType のコメント欄をツリー形式で表示できるプラグインを作成してみました。このプラグインは、コメントをツリー形式で表示するための幾つかのテンプレートタグを追加します。これによりコメントに親子関係を持たせた、ツリー型掲示板のような表示が可能になります。
このプラグインを導入することで、右図のようにコメントをツリー形式で表示することができます。記事の親子関係はコメント入力欄にある URL フィールドを利用して管理しているため、既に URL フィールドをお使いの場合、これをそのままにプラグインを導入することはできません。申し訳ありませんが、ツリー表示を取るか、URL 入力欄を取るかの二者択一となっています m(_^_)m"オンラインソフトの発表の場としてのウェブログ"という記事で、オンラインソフトをブログを使って公開する場合の方法について書いています。ここで、ユーザとのコミュニケーションツールであるコメント欄について述べた部分がありますが、その中で従来の時系列コメントについて少しコメントをしています。機能要望やバグ報告などが盛んに行われるようになると、時系列コメントでは複数の話題を効率よく追うことが難しくなり、そのためにもツリー型掲示板に近い機能が欲しくなってきます。
Web を検索したところ、最近に投稿されたコメントをツリー化するための改造については幾つか発見することができましたが、個別アーカイブのコメントをツリー化できるものは残念ながら発見できませんでした。
Lunar's 「本日の○○」:『カストマイズ』では、MovableType の標準テンプレートを使って、最近に投稿されたコメントをツリー表示とするための改造が紹介されています。Web で検索できた改造のほとんどはこれと同じものでした。
また、小粋空間:サイドメニューのツリー化スクリプト(改)では、JavaScript を利用してツリー表示を実現する手法が紹介されています。ここで公開されてる maketree.js は、コメントに限らずトラックバックやカテゴリなど様々に使うことができ、サブカテゴリーも再帰的に展開してくれるスグレモノです。しかし今回、目指しているツリー型掲示板に一番近いものの、このままではコメントの親子関係を実現できそうにありません。
当初、maketree.js を参考に色々弄ってみましたが、コメント毎に親子関係の情報を持たねばならず、MovableType 標準では実現できそうにないという結論に至りました。MovableType には簡単に機能拡張が行えるプラグインという仕組みがあり、そこで今回、コメント欄でツリー型掲示板を実現できるようなプラグインを自作することにしました。
結局、自作することになったプラグインは全く簡単ではありませんでしたが!
今のところ、どのエントリのコメント欄も平和なもので、このツリー型コメントが効果を発揮するのはまだまだ先のことになりそうです。しょんぼり。
MTCommentTreeMTComments タグの替わりに使います。この中では MovableType 標準のMTComment* タグに加えて、以下のタグを使うことができます。MTCommentHasChildMTCommentHasNoChildMTCommentIsRootMTCommentChildRecurseMTCommentTree で定義されているテンプレートを再帰的に呼び出します。MTComments テンプレートタグをMTCommentTree に修正し、コメントが子を持つ場合についてMTCommentHasChild タグを用いて記述します。<MTCommentTree><$MTCommentAuthor$>:<$MTCommentDate$><br /><$MTCommentBody$><MTCommentHasChild><div><$MTCommentChildRecurse$></div></MTCommentHasChild></MTCommentTree>
<input type="hidden" name="url" value="">
<!--MTCommenTree タグ中で、各コメントに返信用リンクを追加します--><a href="#" onclick="#""><script type="text/javascript" language="javascript">function writeReply (id){document.commentform.url.value = id;}</script>これで、コメント毎に用意された"返信する"リンクをクリックした後にコメントを投稿すると、投稿されたコメントは親子関係として表示されることになります。
親に指定されているコメントにアイコンを表示するなど、改善の余地はまだまだありそうです。このままでは、返信リンクをクリックしても画面に変化が無いので、意図しないコメントにレスを返してしまうなどの事故があります。
デフォルトでは、ルート(親を持たない状態)にコメントが投稿されます。
master) ... バグ修正や機能追加など開発途中のバージョンです。開発中の新機能などをいち早く利用できますが、新しいバグが生まれていたり、テストが不十分な場合があります。ぴろり への返信:
どうもこんにちは。tomo への返信:
報告ありがとうございました。ぴろり への返信:
たびたびすみません。ぴろり への返信:
さらにたびたびすみません(^_^;tomo への返信:
自己レスです。タグが消えちゃいました。tomo への返信:
こちらこそ!tomo への返信:
ご指摘ありがとうございました。ぴろり への返信:
修正版早速ありがとうございます。tomo への返信:
MTCommentHasChild、MTCommentHasNoChild、MTCommentIsRoot の偽条件にはtomo への返信:
</MTCommentHasChild>tomo への返信:
5.の他の6つの・・・の部分ですが、ぴろり への返信:
投稿時間がカブっちゃいましたね(^_^;)Irana への返信:
> ぴろりさんのサイトで使用されているタグを、taka への返信:
すいません、自己レスです。タグが消えちゃいました。