setvarモデファイア(変数代入)
テンプレートタグでの出力結果を変数へ代入するには、MTSetVarBlockテンプレートタグを用います。これに加え、Movable Type 4.1からは、出力を行うテンプレートタグへsetvarモデファイアを指定すれば、同じようなことができるようになりました。
「最新のエントリのタイトルを5件、リスト形式で変数へ代入する」というコードを、「MTSetVarBlockを用いた場合のサンプル」と「setvarモデファイアを指定した場合のサンプル」の二通りで説明します。
MTSetVarBlockでのサンプルコード
コード
<p>SetVarBlockでのコード</p>
<MTSetVarBlock name="last5">
<ul>
<MTEntries lastn="5">
<li><MTEntryTitle></li>
</MTEntries>
</ul>
</MTSetVarBlock>
<MTGetVar name="last5">
実行結果
SetVarBlockでのコード
- 繰り返し処理における予約変数
- MTにおける変数の有効範囲や、それに関わる問題点
- 変数への適切な代入場所
- 便利なコメントアウトの仕方
- MTSetVarTemplateを用いた演算パッキングの例
setvarモデファイアでのサンプルコード
コード
<p>setvarモデファイアでのコード</p>
<MTEntries lastn="5" setvar="last5">
<li><MTEntryTitle></li>
</MTEntries>
<ul>
<MTGetVar name="last5">
</ul>
実行結果
setvarモデファイアでのコード
- 繰り返し処理における予約変数
- MTにおける変数の有効範囲や、それに関わる問題点
- 変数への適切な代入場所
- 便利なコメントアウトの仕方
- MTSetVarTemplateを用いた演算パッキングの例
挙動の相違点
MTSetVarBlockを用いた例では、上記サンプルのようにul、liタグを含めることができます。
対してsetvarモデファイアを用いた例では、MTEntriesブロックタグへ変数名を指定しています。つまりこのブロック内で実行したテンプレートタグの出力結果が変数へ代入されます。付加したliタグも一緒に格納されます。変数 last5の値をMTGetVarで値を取り出すときに、ulタグのみ変数の上下へ書き加える形となります。
ファンクションタグへsetvarモデファイアを指定してみると...
コード
<p>setvarモデファイア(2)</p>
<MTSetVar name="Inc" value="0">
<MTEntries lastn="5" setvar="last5">
<MTSetVar name="Inc" op="++">
<MTIf name="Inc" eq="3">
<MTEntryTitle setvar="three">
<MTElse>
<li><MTEntryTitle></li>
</MTIf>
</MTEntries>
<ul>
<MTGetVar name="last5">
</ul>
<ul>
<li><MTGetVar name="three"></li>
</ul>
実行結果
setvarモデファイア(2)
- 繰り返し処理における予約変数
- MTにおける変数の有効範囲や、それに関わる問題点
- 便利なコメントアウトの仕方
- MTSetVarTemplateを用いた演算パッキングの例
- 変数への適切な代入場所
setvarモデファイア注意点
setvarモデファイアは、ファンクションタグにも指定できます。このサンプルコードでは、3番目のエントリタイトルのみ「three」という変数へ代入し、それ以外のエントリタイトルを「last5」という変数へ代入しています。
上記サンプルのように「親ブロックのMTEntriesブロックタグへsetvarモデファイアを指定→ブロック内のMTEntryTitleにもsetvarモデファイアを指定」というように入れ子で使用すると、上記の例では3番目のリストが抜け落ちてしまいます。
これはsetvarモデファイアを指定したテンプレートタグは、実行結果を出力せず、指定した変数へ値の代入を行うだけの挙動に変化するためです。
意図しない出力結果とならないよう、注意が必要です。
- ページ先頭へ
- 次のエントリ: wrap_textモデファイア(N文字で改行)
- カテゴリ:グローバル・モデファイア関連サンプル