Top > March 29, 2006

アーカイブページに「最近のコメント」「最近のトラックバック」を表示する

「カテゴリー・アーカイブページや月別アーカイブページで『最近のコメント』『最近のトラックバック』が正常に表示されません」という質問を時々頂くことがあります。

質問の通り、例えばこのサイトのトップページにある「最近のエントリー」「最近のコメント」「最近のトラックバック」のテンプレートをそのままアーカイブページに貼り付けても、ユーザーが期待する表示にはなりません。これはリスト表示に使われるMTタグ(MTEntries等)がアーカイブの属性に依存した振る舞いをするのが原因と思われます(下記の調査ではそうでもない結果になっていますが)。

これは不具合ではなく、Movable Type の仕様、あるいは制限事項と思って頂いて良いと思いますが、見落としていなければユーザーマニュアルには明示的な記述はありません。したがってこれらのリスト類がどのように表示されるか、実際に設定してみないと分からない訳です。

ということで、トップページに設定しているリストを各アーカイブページに設定した場合の結果と、それらを回避する方法について記します。

1.MTタグをアーカイブテンプレートに設定した場合の結果

公開テンプレートを例に、メインページに設定してある「最近のエントリー」「最近のコメント」「最近のトラックバック」と同じMTタグを各アーカイブページに設定した場合の表示がどのようになるかを、下記の一覧にまとめました。

 カテゴリー・アーカイブ月別アーカイブエントリー・アーカイブ
最近の
エントリー
該当カテゴリーのエントリー一覧該当月のエントリー一覧トップページと同様
最近の
コメント
[MTEntries recently_commented_on指定]
該当カテゴリーの全エントリーのコメントをMTCommentsのlastn分表示
[MTEntries lastn指定]
コメントのないエントリー含めlastn分表示
[MTEntries recently_commented_on指定]
該当月の全エントリー・コメントをMTCommentsのlastn分表示
[MTEntries lastn指定]
該当月のコメントのないエントリー含めlastn分表示
トップページと同様
最近の
トラックバック
表示されないトップページと同様該当エントリーのトラックバック一覧

2.アーカイブページで正常に表示する方法

次にアーカイブページで「最近のエントリー」「最近のコメント」「最近のトラックバック」を表示する方法を記します。

2.1 プラグインを利用する

MTCollate プラグインを利用すればカテゴリー・アーカイブ/月別アーカイブで正常に表示されるようです。設定方法はMTCollate を使って「最近のコメント」を表示するに記しています。ただしエントリー・アーカイブでは該当エントリーだけが対象になるようです。

もうひとつは Recents プラグインを利用します。

The blog of H.Fujimoto最近のコメント/トラックバックをエントリーとともに表示するプラグイン

本プラグインであれば各アーカイブページで正常に動作します。いずれも MTCommentsRecent タグに mode="force" を付与することを忘れないでください。

2.2 モジュール化する

リスト表示用タグをアーカイブテンプレートに直接貼り付けると冒頭の問題が発生しますが、リスト自体を独立したモジュール(部品)として登録すれば解消されます。
以下、インデックステンプレートに「最近のコメント」を登録して、それをアーカイブページから読み込む方法を紹介します。

2.2.1 モジュール用テンプレートの作成

管理画面の「テンプレート」をクリック→右上の「テンプレートを新規作成」をクリック。次画面で下記を設定します。

テンプレート名:最近のコメント
出力ファイル名:recentComments.html
インデックス・テンプレートを再構築するときに、このテンプレートを自動的に再構築する:チェック
テンプレートの内容:下記(ここでは公開テンプレートのタグを流用しています)
<div class="sidetitle">
Recent Comments
</div>
 
<div class="side">
<MTEntries recently_commented_on="5">
<a href="<$MTEntryLink$>"><MTEntryTitle></a>
<br />
<MTComments lastn="5">
└ <a href="<$MTEntryLink$>#c<$MTCommentID$>" title="c<$MTCommentID$>">
<MTCommentAuthor></a> <$MTCommentDate format="%m/%d"$><br />
</MTComments>
</MTEntries>
</div>

設定が完了したら保存・再構築してください。これで「最近のコメント」だけを表示するためのページが index.html と同じディレクトリにできあがります。ファイル名の拡張子は .html にしていますが、.txt 等なんでも結構です。

2.2.2 アーカイブテンプレートの修正

アーカイブテンプレートの編集画面に進み、2.2.1項で作った「最近のコメント」を表示する設定を行います。
A/B/Cのいずれかを選択してください。

A.MTInclude タグでインクルードする
B.PHPでインクルードする
C.JavaScriptでインクルードする

違いは、Aは再構築を契機に「最近のコメント」を取得するのでスタティックページと同じ効果(=次に再構築が実行されるまで最近のコメントが更新されない)ですが設定が手軽に行えます。
Bはページビューを契機に「最近のコメント」取得します。「最近のコメント」はコメントが投稿されるたびに更新されるので、常に最新情報が反映されるというメリットがあります。ただしPHP化する必要がある・PHPがインストールされている必要がある等の条件があります。
CはA・Bの長所をもっています。

A.MTInclude タグを利用する

「最近のコメント」を表示したい場所に下記のタグを追加して、保存・再構築します。

<$MTInclude file="recentComments.html"$>
B.PHPを利用する

「最近のコメント」を表示したい場所に下記のタグを追加して、保存・再構築します。

<? readfile('<$MTBlogURL$>recentComments.html')?>

Bの場合、はタグを記述するテンプレートの拡張子が .php であることが前提となります。また、1行目にXML宣言

<?xml version="1.0" encoding="<$MTPublishCharset$>"?>

が記述されている場合は

<? echo('<?xml version="1.0" encoding="<$MTPublishCharset$>"?>') ?>

に変更してください。さらにアーカイブページのファイル(index.html)が残っていると、リンクをクリックした場合に .html ファイルを優先してアクセスする可能性があるため、全アーカイブページを一旦削除してから再構築されることを推奨します。

C.JavaScript を利用する

手順が前後してすいませんが、2.2.1の内容は下記に変更してください。

テンプレート名:最近のコメント
出力ファイル名:recentComments.js
インデックス・テンプレートを再構築するときに、このテンプレートを自動的に再構築する:チェック
テンプレートの内容:下記(ここでは公開テンプレートのタグを流用しています)
document.write('<div class="sidetitle">');
document.write('Recent Comments');
document.write('</div>');
 
document.write('<div class="side">');
<MTEntries recently_commented_on="5">
document.write('<a href="<$MTEntryLink$>"><MTEntryTitle encode_js="1"></a>');
document.write('<br />');
<MTComments lastn="5">
document.write('└ <a href="<$MTEntryLink$>#c<$MTCommentID$>" title="c<$MTCommentID$>">');
document.write('<MTCommentAuthor encode_js="1"></a> <$MTCommentDate format="%m/%d"$><br />');
</MTComments>
</MTEntries>
document.write('</div>');

そしてアーカイブテンプレートの「最近のコメント」を表示したい場所に下記のタグを追加して、保存・再構築します。

<script type="text/javascript" src="<$MTBlogURL$>recentComments.js"></script>

以上です。
「最近のエントリー」や「最近のトラックバック」も同様の手順で作成すればOKです。

3.まとめ

個人的にはモジュール化による表示を推奨します。理由はリストの修正・管理が容易になり、再構築のパフォーマンスも向上するためです。「最近のエントリー」「最近のコメント」「最近のトラックバック」を全アーカイブページ分生成することと、3ファイルだけを生成することを比較すれば、どちらが速いか感覚的にお分かりになると思います。先のプラグインと組み合わせればさらにきめこまかい表示の設定が可能になります。
トップページ等のインデックステンプレートのリスト類も同様の手法でインクルードすると良いでしょう。

最初の設定がやや手間取るかもしれませんが興味のある方はお試しください。なお当サイトでは全てのリストについてPHPモジュール化を行っています。

Comments [11] | Trackbacks [5]
Now loading...
Introduction
List of "Mar 29, 2006"
Recent Entries
Recent Comments
Recent Trackbacks
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

loading ...
Categories
Monthly Archives
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 4.261