MovableType4の複数ブログ運営で、各ブログごとにエントリー下に異なる内容を表示させたい場合は、割と簡単に表示させることができます。

しかし、これに、ブログとカテゴリごとに異なる内容を表示させるとなると、場合によっては、やや面倒です。

2つめの方法は、mt:setVarBlockタグを使って、テンプレートを制御する方法です。

カテゴリの制御mt:entryIfCategory

まずは、一つのブログでカテゴリごとに、異なる内容を表示させる方法です。

あるブログで、カテゴリ名「大きいサイズの靴」の時だけ、エントリー下にある内容を表示させたいとします。

まずは、表示させたい内容のテンプレートモジュールをそのブログで作成します。たとえば、その表示させたいテンプレートが、「エントリー大きなサイズの靴」というテンプレート名だったとすれば、以下のように、グローバルテンプレートのブログ記事テンプレートに記述します。

※<>は全角です。半角に修正して使ってください。

<mt:entryifCategory name=”大きいサイズの靴”>
<$mt:include module=”エントリー大きなサイズの靴”$>
</mt:entryifCategory>

これで、カテゴリ名が「大きいサイズの靴」の時だけ、「エントリー大きなサイズの靴」のテンプレートがインクルードされます。

基本的に、カテゴリが重なっていなければ、このパターンで繰り返し記述していけば、ブログごとにふりわけなくてもなんとかなります。

ブログとカテゴリ別に内容表示を制御:mt:setVarBlock

やっかいなのは、ブログ3のエントリー下に、カテゴリ「大きいサイズの靴」の時は、テンプレート「エントリー大きなサイズの靴」をインクルードし、それ以外は、テンプレート「エントリー下全部」をインクルード。さらに、ブログ11のエントリー下には、何も表示させない、といったような場合です。

この場合は、mt:setVarBlockタグを使用し、ブログ記事のテンプレートに、blog_idを持たせて、制御を行います。

blogIDをmt:setVarBlockでテンプレートに代入

MovableTypeにおいて、それぞれのブログには固有のIDが付与されますので、その値を使います。

たとえば、グローバルテンプレートのブログ記事テンプレートの、最初に、以下のように、書き加えます。

<mt:setVarBlock name=”blog_id”><$mt:blogID$></mt:setVarBlock>

これで、blog_idという変数に、blogIDの値が代入されました。

ちなみに、blogIDは、MovableType各ブログの管理画面で、URLを見れば、blog_id=1などと表示されているので、それでわかります。

あと、mt:setVarというタグもありますが、変数の値にmtタグを使うときは、mt:setVarBlockの方を使います。

blogIDによる制御

各ブログを再構築するときに、各ブログのエントリーアーカイブテンプレートは、グローバルテンプレートからインクルードされます。

ブログID3のエントリーテンプレートが再構築される時には、そのテンプレートが持つblog_idの値は3となり、ブログID11のエントリーテンプレートが再構築される時には、そのテンプレートが持つblog_idの値は、11となります。

そして、グローバルテンプレートでブログ記事テンプレートの、<$mt:entryMore$>の下あたりに、次のように付け加えます。

<mt:if name=”blog_id” eq=”3″>
<mt:entryifCategory name=”大きいサイズの靴”>
<$mt:include module=”エントリー大きなサイズの靴”$>
<mt:else>
<$mt:include module=”エントリー下全部”$>
</mt:else>
</mt:entryifCategory>
</mt:if>

これは、もし、ブログIDが3で、エントリー記事のカテゴリが「大きいサイズの靴」なら、「エントリー大きなサイズの靴」というテンプレートをインクルードする。ブログID3で、カテゴリがそれ以外なら、「エントリー下全部」というテンプレートをインクルードする、となります。

この場合、「エントリー下全部」のテンプレートがインクルードされるのは、ブログIDが3のブログだけです。

エントリーアーカイブテンプレートの再構築を実行するとき、そのエントリーアーカイブテンプレートがblog_idに3の値を持っている時だけ、上記の処理が実行されます。

もし、以下のように書かれていたら、

<mt:entryifCategory name=”大きいサイズの靴”>
<$mt:include module=”エントリー大きなサイズの靴”$>
<mt:else>
<$mt:include module=”エントリー下全部”$>
</mt:else>
</mt:entryifCategory>

このように記述されていたら、「エントリー下全部」のテンプレートは、全てのブログでカテゴリが「大きいサイズの靴」でないブログ記事にインクルードされます。

mt:setVarBlockで制御

以上のように、mt:setVarBlockタグを使えば、一つのテンプレートをかなりいろいろ使い回せそうな感じです。

ただ、条件分岐があまり複雑になると、再構築時間が長くなったりしないのかな、と思いますが、それはまた、別の話し、ということで。