top

アーカイブにもメインページと同じ表示を~indexcontextプラグイン考察

MTのアーカイブ頁では「最近のエントリー」「コメント」「トラックバック」などはそのアーカイブに属するものしか表示されません。例えばカスタマイズカテゴリにメインページと同じ記述をしても、全エントリーが表示されるのではなく、カスタマイズカテゴリ内のエントリーのみが表示されます。月別アーカイブも同じでその月に属するエントリーやコメントしか出てきません。これはMTの仕様です。

これを解決するには以下のような方法があります。
<$MTInclude$>を使う
メインインデックスに別パーツを作り<$MTInclude$>で読み込むお馴染みの方法。
<MTArchiveList>を使う
最近のエントリーなら<MTArchiveList archive_type="Individual">で<$MTArchiveTitle$>を呼び出すことでメインページと同じ表示にすることが出来ます。

が、ここではダイナミック対応プラグインを使う方法について書いてみたいと思います。
先日紹介したあんちもん2.Labさんがダイナミック化してくれているindexcontext プラグイン。直接アーカイブ頁にタグを書き込むだけでメインページと同じ表示を実現してくれる大変便利なプラグインです。

1.プラグインのセット
以下からそれぞれプラグインをダウンロードして解凍、各pluginsディレクトリにアップします。

静的用:blog.aklaswad.comプラグイン頁(オリジナル) → plugins/
動的用:あんちもん2.Labプラグイン頁 → php/plugins/

2.テンプレートタグの追加
<MTEntries>~</MTEntries>を以下の赤字のタグで囲みます。

<MTIndexContext>
<MTEntries lastn="5">
  ・・・
 MTEntriesの内容
  ・・・
</MTEntries>
</MTIndexContext>

コメントなら<MTComments>~</MTComments>、「最近のトラックバック」なら<MTPings>~</MTPings>の前後を同様に囲みます。これだけでアーカイブ頁がメインページと同じ表示になります。コメントやトラバにまで使えるのが嬉しいところです。

<注意>indexcontextプラグインを静的生成で使う時の罠
実はこのプラグイン、静的生成で使う時には罠がありますのでご注意。MTの仕様により、エントリー投稿・保存時に再構築されるのは「そのエントリーと関連するアーカイブ」だけなんですよね。そのため、いちいち全頁に再構築をかけないと全てのアーカイブに表示が反映されません。
ダイナミックなら無問題で即全頁に結果が反映されます。めっちゃ便利です。むしろこれはダイナミック・パブリッシング下で使ってこそ真価を発揮できるプラグインかもしれません。

ダイナミックに向いたプラグイン・タグ
この他にもけっこうあるんですよね。例えばフォトログに使っている同一カテゴリー内での前後エントリーへのリンクを作ってくれるプラグイン。これもMTの仕様により、1つ前のエントリーが必ずしも同じカテゴリーに属しているとは限らないため、投稿しても同じカテゴリ内で1つ前のエントリーにリンクが張られないという現象が生じます。それを解決するため、静的生成下では余計な苦労(一手間)を強いられることになります。ダイナミックなら再構築関係なく常に最新の表示になりますからそのまま使えて手間要らずです。
プラグインではないですが、 <MTEntriesWithSubCategories>タグもそうですね。これも静的生成では子カテゴリの再構築に親カテゴリが伴ってくれないので、再構築しないと最新の情報が反映されません。ダイナミックならタグを入れるだけで期待通りの動きになります。また、<$MTInclude$>同様、WidgetManagerも再構築しないと最新情報が反映されないので、むしろダイナミック向きの機能かと思います。

MTの仕様について考えてみる
アーカイブ頁の挙動がメインページと違うのは、MTの再構築の仕様に関係があるのではと思っています。エントリーの投稿で再構築されるアーカイブ頁はそのエントリーの属するカテゴリ・日付アーカイブ・1つ前のエントリーだけです。静的生成の場合、投稿の度に全頁を再構築してたらとてももちませんから、それを考えると止むを得ない仕様だと思います。そのため再構築が行われない頁でも矛盾が生じないように「そのアーカイブ内の情報」に限って表示される仕様になっているのではと思うのです。

ダイナミック・パブリッシングの本当のメリット
「再構築不要」という言葉に隠されている本当のメリットは、「再構築時の負荷が減る・再構築の時間が短縮できる」ではなくて、いい発想で作られたプラグインやMTタグの真価を最大限に発揮して使ってあげられることかもしれません。私自身まだ気づいてなかった「ダイナミックの本当のいいところ」を探していってあげたいと思います。