MTSetVarBlock と MTSetVarTemplate の違いについて

MTSetVarBlock と MTSetVarTemplate の違いについて

Posted at October 22,2007 12:50 AM
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 で振り分ける)

管理画面テンプレートは調査していないので、実際にはもう少し適正な使用方法があるかもしれません。

関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)