MTSetVarBlock と MTSetVarTemplate の違いについて
Category:[テンプレートタグ]
Tag:[MovableType, MTSetVarBlock, MTSetVarTemplate]
Movable Type 4 では、MTSetVar タグや MTSetVarBlock タグを用いた制御が数多く行われています。 本エントリーでは、新たに追加された MTSetVarTemplate タグについて解説します。
1.MTSetVarTemplate タグの機能
MTSetVarTemplate タグで囲まれた内容を、変数として値を設定します。
<MTSetVarTemplate name="foo">
<!-- do something -->
</MTSetVarTemplate>
なお、MTSetVarTemplate タグは、ドキュメントによれば MT 管理画面での使用が目的らしいので、ユーザのテンプレートで用いる可能性は低いかもしれません。
2.MTSetVarBlock タグとの違い
MTSetVarBlock タグは、ブロック内の内容が処理された結果を値として取得しますが、MTSetVarTemplate タグは、ブロックの内容が MTGetVar、あるいは MTVar タグで呼び出された時点ではじめて評価されます。
3.サンプル
ここでは MTIncludeタグ・MTGetVar タグと組み合わせた、MTSetVarBlock タグと MTSetVarTemplate タグの振舞いの違いを示したいと思います。
3.1 MTSetVarBlock + MTInclude + MTGetVar(OK)
MTSetVarTemplate タグは用いず、アーカイブテンプレートの MTInclude タグが実行された時点で MTEntries 全体が評価されるサンプルです。
アーカイブテンプレート
<$MTInclude module="test"$>
<$MTGetVar name="entries"$>
テンプレートモジュール(test)
<MTSetVarBlock name="entries">
<MTEntries>
<$MTEntryTitle$>
</MTEntries>
</MTSetVarBlock>
3.2 MTSetVarBlock + MTInclude + MTGetVar(NG)
アーカイブテンプレートの MTInclude で MTEntryTitle が評価されますが、評価時点では MTEntryTitle が MTEntries コンテキスト外のため、再構築エラーとなるサンプルです。
アーカイブテンプレート
<$MTInclude module="test"$>
<MTEntries>
<$MTGetVar name="entries"$>
</MTEntries>
テンプレートモジュール(test)
<MTSetVarBlock name="entries">
<$MTEntryTitle$>
</MTSetVarBlock>
3.3 MTSetVarTemplate + MTInclude + MTGetVar(OK)
3.2項の MTSetVarBlock タグを MTSetVarTemplate タグに置き換えることで、アーカイブのMTInclude 時点でMTEntryTitleは評価されず、MTGetVar(=MTEntires ブロック内)で評価されるので、期待通りの動作になります。
アーカイブテンプレート
<$MTInclude module="test"$>
<MTEntries>
<$MTGetVar name="entries"$>
</MTEntries>
テンプレートモジュール(test)
<MTSetVarTemplate name="entries">
<$MTEntryTitle$>
</MTSetVarTemplate>
4.参考:MT4 のデフォルトテンプレート
3項でサンプルをいくつか比較しましたが、実際には、デフォルトテンプレートの MTEntries 関連のタグデザインは下記の通りです。
MTGetVar は用いず、アーカイブテンプレートの MTEntries ブロックに直接 MTInclude が記述され、MTEntryTitleが評価されます。
アーカイブテンプレート
<MTEntries>
<$MTInclude module="test"$>
</MTEntries>
テンプレートモジュール(test)
<$MTEntryTitle$>
5.まとめ
MTSetVarTemplate を用いるケースとして、下記が考えられます。
- テンプレートモジュールをひとつにまとめたい
- ブロックタグとファンクションタグのテンプレートを分離したい
- ファンクションタグのテンプレートモジュールに、複数のバリエーションをもたせる(MTGetVar で振り分ける)
管理画面テンプレートは調査していないので、実際にはもう少し適正な使用方法があるかもしれません。
- MTInclude タグの name モディファイア
- Movable Type(MT)の特殊変数の入れ子
- ブロックタグにelseタグを組み込んで判定する
- Movable Type 5 におけるウェブサイトとブログの複数指定方法
- ウェブサイトとブログでグローバルナビゲーションを共有する
- regex_replace モディファイアをダイナミックパブリッシングで利用する場合の注意
- Movable Type のアーカイブページへのリンクを相対パス(ホストからの相対URL)で表示する
- include_with_website モディファイア
- Movable Type の記事中の&を&に変更する方法
- Movable Type テンプレートタグの簡略化まとめ
- Movable Type のテンプレートタグでよくある5つの書き間違い
- Movable Type で他のブログのテンプレートモジュール・ウィジェットを利用する
- Movable Type のブロックタグにファンクションタグで使うモディファイアを指定する
- MTIf タグの test モディファイアで Perl の式を利用する
- MTIf タグの tag モディファイアでテンプレートタグの値を直接参照する
- Movable Type 4.1 / MTOS における配列とハッシュの利用方法
- MTIf タグの like 属性について
- strip 属性で日付の空白を削除する
- MTIgnore タグ
- エントリーで table タグを記述する場合の注意
- サイドバーに Google Adsense を貼り付ける
- Movable Type 4 のテンプレート構造
- FeedBurner 動画広告テスト配信
- ブログ記事に同一カテゴリーのブログ記事リストを表示(MT4版)
- Movable Type 4.1 / MTOS における変数での算術演算子の利用方法
- Movable Type のテンプレートタグでよくある5つの書き間違い
- Movable Type 4.1 / MTOS における配列とハッシュの利用方法
- MTIf タグの like 属性について
- Movable Type 4 でポッドキャスト/ポッドキャスティング(その2:MT-Enclosures プラグイン)
