ナビ

カテゴリごとのエントリ一覧 Part2

wrote :

エントリーページに、そのエントリーが属するカテゴリ内の最新10件を表示しようとした場合をもう一度考えます。

<mt:categorylabel setvar="カテゴリ名">
<MTIf name="カテゴリ名" eq="カテゴリ1">
<MTEntries lastn="10" category="カテゴリ1">
<MTEntriesHeader><ul></MTEntriesHeader>
<li><mt:entrytitle></li>
<MTEntriesFooter></ul></MTEntriesFooter>
</MTEntries>
</MTIf>
<MTIf name="カテゴリ名" eq="カテゴリ2">
<MTEntries lastn="10" category="カテゴリ2">
<MTEntriesHeader><ul></MTEntriesHeader>
<li><mt:entrytitle></li>
<MTEntriesFooter></ul></MTEntriesFooter>
</MTEntries>
</MTIf>

これで問題ないのですが、たとえば最新10件を5件に変更する場合を考えてみてください。
lastn="10"をlastn="5"に修正するだけです。
ひとつのブログで管理している場合は問題ないのですが、複数のブログをマルチブログ管理している場合、ブログの数だけ同様の作業が発生します。これは非効率と言わざるを得ません。
そこで別の方法を考えます。

カテゴリアーカイブとMTInclude、共通モジュールをうまく活用する

まず、下記のようなカテゴリーアーカイブをブログごとに作成します。

<MTEntries lastn="10">
<MTEntriesHeader><ul></MTEntriesHeader>
<li><mt:entrytitle></li>
<MTEntriesFooter></ul></MTEntriesFooter>
</MTEntries>

アーカイブマッピングは「category/sub-category/lastn.html」とカスタマイズします。

このアーカイブは、カテゴリごとにそのカテゴリ内の最新エントリ10件を書き出したファイルを出力します。

続いて、エントリーアーカイブ

<mt:categorybasename setvar="カテゴリファイル名">
<MTIf name="カテゴリファイル名" eq="sample1">
<MTInclude file="sample1/lastn.html">
</MTIf>
<MTIf name="カテゴリファイル名" eq="sample2">
<MTInclude file="sample2/lastn.html">
</MTIf>

最後に、先ほど作成したカテゴリーアーカイブを共通モジュール化します。ここでは、グローバルテンプレートを利用して、モジュール名を「カテゴリ別一覧」とします。

モジュール
<MTEntries lastn="10">
<MTEntriesHeader><ul></MTEntriesHeader>
<li><mt:entrytitle></li>
<MTEntriesFooter></ul></MTEntriesFooter>
</MTEntries>
カテゴリーアーカイブ(各ブログ)
<MTInclude module="カテゴリ別一覧">

こうすることで、最新件数を変更する場合は、ひとつのモジュールを変更するだけで全ブログに反映させることができます。つまり、 lastnに限らず、MTEntries内のモディファイア(属性)を修正する可能性がどれだけ考えられるかを考えて使い分けるのがよいかと思います。