mtde.info

Movable Type Developers Express

setvarモデファイア(変数代入)

2008年2月17日 12:03 | Writer: apstar | 記事本文

テンプレートタグでの出力結果を変数へ代入するには、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でのコード

setvarモデファイアでのサンプルコード

コード

<p>setvarモデファイアでのコード</p>
<MTEntries lastn="5" setvar="last5">
    <li><MTEntryTitle></li>
</MTEntries>
<ul>
<MTGetVar name="last5">
</ul>

実行結果

setvarモデファイアでのコード

挙動の相違点

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)

setvarモデファイア注意点

setvarモデファイアは、ファンクションタグにも指定できます。このサンプルコードでは、3番目のエントリタイトルのみ「three」という変数へ代入し、それ以外のエントリタイトルを「last5」という変数へ代入しています。

上記サンプルのように「親ブロックのMTEntriesブロックタグへsetvarモデファイアを指定→ブロック内のMTEntryTitleにもsetvarモデファイアを指定」というように入れ子で使用すると、上記の例では3番目のリストが抜け落ちてしまいます。

これはsetvarモデファイアを指定したテンプレートタグは、実行結果を出力せず、指定した変数へ値の代入を行うだけの挙動に変化するためです。

意図しない出力結果とならないよう、注意が必要です。

グローバル・モデファイア関連サンプル

2008 mtde.info