top

MTIncludeタグの使い方とモジュール化

このブログで使うカスタマイズによく出てくるのが<$MTInclude$>というタグです。これは非常に便利なタグで、特にダイナミック・パブリッシング化している場合にはプラグインを使うのに欠かせないタグです。ところで、このタグも<$MTDate$>同様、静的生成時とダイナミック時では動作に少し違いが出てきます。混乱しないように、その辺を少しまとめてみようと思います。

*モジュール化とは
テンプレートの中の一部分を別パーツにして、再構築時に読み込む技です。共通するパーツはモジュール化して各テンプレートから読み込むようにしておくと、変更があってもモジュール内を変更するだけで全頁に同じ変更が行き渡るので管理が楽になります。

■<$MTInclude$>タグの使い方
このタグには2通りの使い方があります。

1.テンプレートのモジュールを読み込む
「テンプレート」の「モジュール」で新しいモジュールを作成し、名前をつけて保存します。ここではサイドバーの内容を「sidebar」という名前で保存したものとします。それを各テンプレートの表示したい場所に

<$MTInclude module="sidebar"$>

と記述します。

2.外部ファイルを読み込む
メインインデックスのテンプレートで新しいテンプレートを作成し、名前をつけて保存・再構築します。ここではサイドバーの内容を「sidebar.html」というファイル名で保存したものとします。それを各テンプレートの表示したい場所に

<$MTInclude file="sidebar.html"$>

と記述します。

1と2の違いは読み込む内容が「そのブログのモジュール」か「外部のファイル」かです。1ではそのブログで設定したモジュールしか読み込めませんが、2ではそのブログに関係なくどんなファイルでも読み込めるので、他のブログの更新内容や自分で作ってアップロードしたファイルでも読み込めます。そのため応用範囲が広いです。
違うブログやサイトの内容を読み込む時は、赤字の部分を読み込みたいブログのindex.htmlから見た相対パスまたは絶対パスで指定します。ここではこの方法で別ブログになっているフォトログの最新内容をトップ頁に読み込んでいます(デザインによっては使用していない場合もあります)。

<注>file=""内ではhttpから始まるURLは使えません。また、ここで使われるパスはブログのindex.htmlから見た位置になります。各アーカイブファイルから見た位置からではありませんので、よろしくお願い致します。
参考&関連頁:MTInclude内のファイルパス

■静的生成とダイナミックでの違い
このタグで読み込まれた内容が反映されるのは「再構築時」です。従って、静的生成の場合は「そのファイルが再構築された時点」での情報になるので、必ずしも常に最新の情報を読み込んでくれるとは限りません。そのため常に更新され続ける「最新のコメント」などが含まれるパーツはMTIncludeするには適さないと思われます。しかも生成されるファイルの容量が減るわけでもないので、再構築の時間が短縮されるわけでもありません。静的生成時では「テンプレートの管理が楽になる」以外のメリットがないので、実際にはあまり使われていないようです。

と こ ろ が !

ダイナミック・パブリッシングだと様相がかなり違ってくるんですよね、これが。ダイナミックの場合は「再構築時=アクセスした瞬間」ですから、結果としてMTIncludeの内容が反映されるのは「アクセスした瞬間の最新情報」になるんです。従って再構築から忘れ去られたような古~い頁でも常にリアルタイムの最新情報を表示することができるようになります。よって、ダイナミック時には<$MTInclude$>タグでPHPによるIncludeと同様の効果を得ることが出来るというわけです(しかも拡張子htmlのままで!)。
なお、PHPによるIncludeと静的生成時のMTIncludeの違いは小粋空間さんのこちらにも詳しいです(ダイナミックに移行する前は私も使わせてもらってました~)。

■ダイナミック時の<$MTInclude$>のメリット
上に述べたように、ダイナミック下ではリアルタイム表示になるので「頁の一部に最新の情報をリアルタイムで表示できる」など、使うメリットが大きいのですが、それ以外にも「Perlのプラグイン」を導入するための技として使うことが出来るのが嬉しいところ。プラグインを使う場所だけ静的生成にしてダイナミック頁から読み込むことにより、ダイナミック下でもPerlのプラグインが使えるようになるんですよね。ダイナミックには必須と言ってもいいほどの、まさに必殺技!なタグなのです。

■ダイナミックで<$MTInclude$>を使う時の注意点
一つだけ注意点が。上の1のテンプレートモジュールで作った場合は、読み込まれたモジュールもダイナミックな動きをします。ダイナミックで問題ない内容ならいいんですが、Perlのプラグインが含まれている場合は正常に動作しなくなるのでご注意下さい。Perlのプラグインを使う場合は必ず2の方法で静的別ファイルとして生成して下さい。プラグイン以外でもダイナミックでは動きのおかしくなる場合があったなら、これも2の方法で静的別ファイル化してみるといいです。

<2007.6.28 追記>ファイルのパスについての注意書きを追加。