top

MTIncludeに変数を取り込む

ダイナミック関係の覚え書きです。

<$MTInclude$>はよく使うタグですが、これも<MTEntries>のcategory属性同様、file="******"の青字の部分にはMTの変数タグが使えません。そのため、アーカイブファイルをMTタグで指定して動的に取り込むということが出来ません。しかしこれもSmartyを使うことによって解決することが出来ます。

例として静的生成で作成したカレンダーを各月のアーカイブに取り込む場合。
やりたいことが、

<$MTInclude file="calendar/<$MTArchiveDate format="%Y_%m"$>.html"$>

だった場合、このままではMT変数が混ざっているためMTIncludeタグが正しく機能しません。そこで、以下のように書き換えます。

{{capture name="mdate"}}calendar/<$MTArchiveDate format="%Y_%m"$>.html{{/capture}}
<$MTInclude file="`$smarty.capture.mdate`"$>

つまり、{{capture name="mdate"}}~{{/capture}}間でMT変数を取り込んで文字列に置き換えて<$MTInclude$>内に読み込んでいるわけです。{{capture}}って便利ですね~。覚えておくといろいろ応用がきくと思います。

■<$MTInclude file="○○"$>と{{fetch file="○○"}}の使い分け
{{fetch file="○○"}}は外部ファイルを取り込むSmartyのコードで、<$MTInclude$>と同じ働きをします。ただ、取り込むファイルのアドレスの書き方に少し違いがあります。

<$MTInclude$>は相対パス・絶対パスでしか記述できません。つまり、同じサーバー内にあるファイルしか読み込めないということになります。一方、{{fetch file="○○"}}はhttpから始まるURLで記述するので、他のサーバーにあるサイトからのファイルも読み込めます(その代わり相対パス・絶対パスでは上手く動きません)。

従って、同じサーバー内にあるファイルなら<$MTInclude$>を使い、異なるサーバーのサイトを運営していて、そちらの情報も取り込みたいという場合は{{fetch file="○○"}}という具合に使い分ければいいと思います。

<注:MT4.38以上をお使いの方へ>
MT5.13、5.07、および4.38以降のバージョンではfileモディファイアが標準で無効化されています。fileモディファイアを使うにはmt-config.cgiに以下を追記します。

AllowFileInclude 1

<2007.2.6 capture assignで取り込む方法も追記>
<2007.2.9 サイトパス例を修正>
<2007.8.2 capture assignの記載を取りやめ>
・MT4ではcapture assignを使う方法が使えないのでcapture nameを使う方法のみに統一
<2010.10.20>fileモディファイアの注意追加

 

トラックバックの一覧

トラックバック ダイナミックパブリッシングで静的ファイルを読み込む(smarty fetch)  »» 2007年9月30日 00:03
 MovableTypeでダイナミックパブリッシングを稼働させることで最初にぶち...

コメント

有益なカスタマイズ情報ありがとうございます。
ダイナミックパブリッシングではいろいろお世話になりそうな予感がしております(^^;)

今後ともよろしくお願い致します。

こんにちは。
ダイナミック・パブリッシング、いいですよねー。
Smarty使えばプラグインなしでなんでも出来てしまうし、MT4からは変数機能も強化されたので更に使いやすくなりました。

MTにもこんな素晴らしい動的機能があるんだ!ということを多くの方に知ってもらえればと思ってます。
こちらこそよろしくお願い致します。^^