MTでのブログをまたいだテンプレート共有方法(新規書き起こし)

昔同じようなことは書いたんですが、わかりにくかったり理解が十分じゃなかったりしたので書き直しました。
すべてMT4.2xでの話です。MT5は未検証。

ブログ1のテンプレートをブログ2で使いたい

ブログ1のテンプレートをブログ2で使うには、blog_idモディファイアを設定すればいい。
テンプレートとしてブログ1のものが使用され、出力内容はブログ2のものとなる。

# ブログ2のテンプレート内で
<MTInclude module="ヘッダ" blog_id="1">

ブログ1でのテンプレート出力をブログ2で使いたい

例えば、画像パスなんかは共通にしたいというとき。
もしくはブログ1のとあるカテゴリの最新記事情報が欲しいとき。
こういうときはMTMultiBlogタグを使い、include_blogsモディファイアを指定する。

# ブログ2のテンプレート内で
<MTMultiBlog include_blogs="1">
<MTInclude module="ヘッダ" blog_id="1" include_blogs="1">
</MTMultiBlog>

include_blogsと複数形になっているので複数のブログの指定が可能。
その場合、指定したブログの出力結果をすべて吐き出す。

# ヘッダモジュール
<$MTBlogName$> - <$MTBlogURL$><br>

# テンプレート
<MTMultiBlog include_blogs="1, 2">
<MTInclude module="ヘッダ" blog_id="1" include_blogs="1">
</MTMultiBlog>

# 出力
ブログ1の名前 - http://www.hogehoge1.com/
ブログ2の名前 - http://www.hogehoge2.com/

とはいえ一時的に使ってるブログ内へテンプレートを適応したい

例えば、このカテゴリのエントリ一覧、みたいなモジュールをブログ1でもブログ2でも使いたいんだけど、
画像があって、画像はブログ1内にあるディレクトリで共有させたいときは、ブログ1のURLを使うことで
可能になる。

<img src="<$MTBlogURL$>images/hoge.gif">
<!-- ここはブログ1でもブログ2でも同じURLを出力させたい -->
<MTEntries>
  <a href="<$MTEntryLink$>"><$MTEntryTitle$></a>
  <!-- ここはそれぞれのブログの内容を表示させたい -->
</MTEntries>

みたいな。
そうすると上の例で行けばこのモジュールをMTMultiBlogで囲んでやればいいわけですが、ブログ2においてinclude_blogsで1を指定すると、ブログ1のエントリ一覧が出力されてしまうわけです。
かといってinclude_blogs="1,2"としても、二回リストが表示されるだけ。

このように、「ここの間だけ、各ブログローカルな値で出力させたい」というときは、MTMultiBlogLocalBlogを使う。
このタグで囲まれたエリアは「自分のブログのローカルな内容」を参照して出力してくれる。便利。

<img src="<$MTBlogURL$>images/hoge.gif">
<!-- ここはブログ1でもブログ2でも同じURLを出力させたい -->
<MTMultiBlogLocalBlog>
<MTEntries>
  <a href="<$MTEntryLink$>"><$MTEntryTitle$></a>
  <!-- ここはそれぞれのブログの内容を表示させたい -->
</MTEntries>
</MTMultiBlogLocalBlog>

カテゴリ系タグの挙動が変

しかしMultiBlogを用いたテンプレート使い回しは、カテゴリ系のタグについては動作が変なので注意。
例えばMTCategoriesなどでは、こんな感じ。

# 「カテゴリ」テンプレート
<MTCategories>
  <$MTCategoryLabel remove_html="1" $>
</MTCategories>

# ブログ2での記述
<MTMultiBlog include_blogs="1">
  <MTInclude module="カテゴリ">
</MTMultiBlog>

# 出力結果
ブログ1のカテゴリ1
ブログ1のカテゴリ2
ブログ1のカテゴリ3

んじゃあinclude_blogs="2"にすればいんじゃん、というのはご名答。

# ブログ2での記述
<MTMultiBlog include_blogs="2">
  <MTInclude module="カテゴリ">
</MTMultiBlog>

# 出力結果
ブログ2のカテゴリ1
ブログ2のカテゴリ2
ブログ2のカテゴリ3

ただこれだと、ブログ1のMTBlogURLを参照できないので、画像の共有が行えなくなってしまう。
そこで参照するブログ自体をタグに指定してやると解決。

# 「カテゴリ」テンプレート
<MTCategories exclude_blogs="1">
  <$MTCategoryLabel remove_html="1" $>
</MTCategories>

# ブログ2での記述
<MTMultiBlog include_blogs="1">
  <MTInclude module="カテゴリ">
</MTMultiBlog>

# 出力結果
ブログ2のカテゴリ1
ブログ2のカテゴリ2
ブログ2のカテゴリ3

exclude_blogsで指定するところがミソ。なぜかinclude_blogsではダメだった。blog_idsもダメ。
このexclude_blogsに指定するブログIDをMTSetVarとMTIfを駆使して制御することで、とりあえずテンプレート共有はできるようになる。

ここまでやってしまうと逆にめんどい、という話もあるけど、でもやっぱり共通化できるのでそこは楽なんですねぇ。