2009年09月18日 (金)
以前案件にて、Movable Type 4.2(MT)のマルチブログ機能でサイトを構築しました。普段案件ではWordPressや独自CMSがおおく、久々のMT採用で思い出しながら実装している最中にハマッたこと。今更ながらちょっと、備忘録メモ。
例えばマルチブログのブログ1からブログ2のモジュールをインクルードし、さらにブログ2のエントリを表示させたいときの話。
<!--インクルードする側 ブログ1のテンプレート-->
<MTMultiBlog include_blogs="2"><$MTInclude module="ニュース一覧"$></MTMultiBlog>
<!--インクルードされる側 ブログ2のモジュールテンプレート-->
<ul>
<MTEntries>
<li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$> - <$MTCustField_hoge$></a></li>
</MTEntries>
</ul>
こうすると、カスタムフィールドが見つかりませんとかエラーになって動かず...ブログ2のモジュールのカスタムフィールドの値を削除したらエラーは消えたけど、今度はブログ2のモジュールにブログ1のエントリが適用されてしまうのです。どうやら、自分MTEntriesの扱いに勘違いしていた模様...ハズいです。
<!--インクルードする側 ブログ1のテンプレート-->
<MTMultiBlog include_blogs="2"><$MTInclude module="ニュース一覧" blog_id="2"$></MTMultiBlog>
MTMultiBlog内でも、MTIncludeの扱いは大本のテンプレートが基調になるみたいでblog_id属性で個別にしたら動いた。てっきりMTMultiBlogで包括すればその中は別ブログとして動くモンだと思っていました...。同様に<$MTInclude module="ニュース一覧" blog_id="2"$>単体でもダメなわけです。モジュールのみ呼び出すだけですからね。
MTMultiBlog内に直接テンプレートタグを書くとか、インデックステンプレートとかダイナミックインクルードという手もあったんですが、インクルードする側のブログ1のテンプレート変数によってインクルードするブログ2側のモジュールのエントリ内容を動的に変える必要があったため、インデックステンプレートは使えず、ちょいハマりました。
もっとスマートに行けたら良かったのですが。あるのでしょうか。