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タグを使えば、一つのテンプレートをかなりいろいろ使い回せそうな感じです。
ただ、条件分岐があまり複雑になると、再構築時間が長くなったりしないのかな、と思いますが、それはまた、別の話し、ということで。
※管理人もスタンダード・プレミアムを利用中!
▼ さくらのレンタルサーバ
コメントする