Japanese mtml guide 3 2 - Hiranyaloka/Documentation GitHub Wiki
既に説明済みですが、簡単におさらいをします。
- 条件文を
<mt:Var>
や、<mt:SetVarBlock>
などを用いて設定します。 -
<mt:If>
タグは条件を満たした場合のみ実行します。 -
<mt:Unless>
タグは、<mt:If>
の逆で条件を満たさない場合のみ実行します。 -
<mt:If>
ブロックの中で、<mt:Unless>
の結果と同じ結果を得たい場合は、<mt:Else>
タグと組み合わせる事で、条件を満たさない場合に実行します。 - 条件を満たさず、さらに条件を指定して比較する場合は
<mt:ElseIf>
タグを利用します。
- 使い方
<mt:Var name="love" value="polar bear" /> <mt:If name="love" eq="elephant"> <p>私はゾウを愛しています</p> <mt:ElseIf eq="polar bear"> <p>私はゾウより、シロクマを愛しています</p> <mt:Else> <p>私はゾウもシロクマも愛していないのです</p> </mt:If>
通常行う条件分岐は「name」モディファイアで指定された値が、どう設定されているかで指定します。(上記例参照)
また、ファンクションタグの出力結果を利用して条件を設定する場合は「tag」モディファイアを利用します。
条件定義は細かくモディファイアで設定できますが、何も指定しない場合は <mt:Var>
ファンクションタグにvalueモディファイアが設定されていて、その値が0でない場合のみ実行します。
○name モディファイアでの設定 <mt:If name="foo"> # do foo </mt:If> ○tag モディファイアでの設定 <mt:If tag="BlogEntryCount"> # do bar </mt:If>
ここではnameやtagで指定する値を対象値、それに対するモディファイアによる設定を条件定義と言うこととします。
条件定義をする各モディファイアを解説します。
eqモディファイアは対象値が、eqモディファイアの条件定義と一致する場合に実行します。
<mt:Var name="elephant" value="love" /> <mt:If name="elephant" eq="love"> <p>値が elephant の name モディファイアを持つ MTSetVar ファンクションタグの変数が love と一致するので、この段落は表示されます。</p> </mt:If>
eqモディファイアの逆で対象値がneモディファイアの条件定義と一致しない場合に実行します。
<mt:Var name="elephant" value="love" /> <mt:If name="elephant" ne="like"> <p>値が elephant の name モディファイアを持つ MTSetVar ファンクションタグの変数が like と一致しないので、この段落は表示されます。</p> </mt:If>
likeモディファイアは対象値がlikeモディファイアの条件定義を含む場合に実行します。
<mt:Var name="elephant" value="love" /> <mt:If name="elephant" like="lo"> <p>値が elephant の name モディファイアを持つ MTSetVar ファンクションタグの変数に lo が含まれるので、この段落は表示されます。</p> </mt:If>
また、likeモディファイアはperl正規表現が利用できます。例は対象値が"bar"か"baz"で始まる場合に実行します。
<mt:Var name="elephant" value="barcamp" /> <mt:If name="elephant" like="^(bar|baz)"> <p>値が elephant の name モディファイアを持つ MTSetVar ファンクションタグの変数に bar もしくは baz で始まるので、この段落は表示されます。</p> </mt:If>
ltモディファイアは対象値が、ltモディファイアの条件定義よりも小さい場合に実行します。
<mt:Var name="age" value="28" /> <mt:If name="age" lt="30"> <p>値が age の name モディファイアを持つ MTSetVar ファンクションタグの変数が 30 より小さいので、この段落は表示されます。</p> </mt:If>
ltモディファイアの逆で、gtモディファイアは対象値が条件定義よりも大きい場合に実行します。
<mt:Var name="age" value="28" /> <mt:If name="age" gt="26"> <p>値が age の name モディファイアを持つ MTSetVar ファンクションタグの変数が 26 より大きいので、この段落は表示されます。</p> </mt:If>
leモディファイアは対象値が、leモディファイアの条件定義以下の場合に実行します。
<mt:Var name="age" value="28" /> <mt:If name="age" le="100"> <p>値が age の name モディファイアを持つ MTSetVar ファンクションタグの変数が 100 以下なので、この段落は表示されます。</p> </mt:If>
leモディファイアの逆で、geモディファイアは対象値が条件定義以上の場合に実行します。
<mt:Var name="age" value="28" /> <mt:If name="age" ge="28"> <p>値が age の name モディファイアを持つ MTSetVar ファンクションタグの変数が 28 以上なので、この段落は表示されます。</p> </mt:If>
配列で与えられている対象値のインデックス(添え字)を指定して、配列から値を取り出し条件文と比べます。
<mt:If name="foo" index="0" eq="hoge">
このタグは以下のようにも書けます。
<mt:If name="foo[0]" eq="hoge">
ハッシュで与えられている対象値のキーを指定して、ハッシュから値を取り出し条件文と比べます。
<mt:If name="bar" key="a" eq="hoge">
このタグは以下のようにも書けます。
<mt:If name="bar{a}" eq="hoge">
testモディファイアはperlの式を記述する事ができ、その結果から条件分岐ができるという、大変強力な仕組みです。
<mt:Var name="foo" value="2011/06/01 15:30:00" /> <mt:if test="$foo =~ m!^\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}$!;"> <mt:Var name="foo" /> </mt:if>
<mt:Var name="foo" value="3000" /> <mt:if test="$foo > 2048;"> <mt:Var name="foo" /> </mt:if>
op モディファイアは <mt:If>
だけでなく、 <mt:Unless>
, <mt:Else>
, <mt:ElseIf>
, <mt:Var>
, <mt:SetVarBlock>
, <mt:SetVarTemplate>
で利用できるモディファイアです。op モディファイアの値には、単純な計算を行う関数の名前を指定します。
既存のタグとの組み合わせにより、数的な動作をさせる事が可能になります。
- 演算関数
- add または +: 加算
- sub または -: 減算
- mul または *: 乗算
- div または /: 除算
- mod または %: 剰余
- inc または ++: インクリメント
- dec または —: デクリメント
例)ブログ記事一覧を表示しカウンターが3の倍数のときに「3X」と表示し、それ以外の場合は「NG」と表示させます。
<mt:Entries> <mt:If name="__counter__" op="%" value="3" eq="0"> <mt:Var name="__counter__"> : <mt:EntryTitle> : 3X<br /> <mt:Else> <mt:Var name="__counter__"> : <mt:EntryTitle> : NG<br /> </mt:If> </mt:Entries>
改めて <mt:If>
の使い方を解説しましたがどうだったでしょうか?
単純な条件分岐だけでなく、モディファイアを使う事で色々な条件をあてる事ができる事理解していただけましたか?
新しくプラグインを作成しなくても、 <mt:If>
の活用で同様な動作をさせる事ができる場合もあります。
色々と良い例が挙がっていますので、 MTQ も参考にしてみて下さい。
- 1. ウィジェット
- 2. MTML(初級編)
- 3. MTML(応用編)
- カスタムフィールド
- <mt:If> の活用方法
- 配列、ハッシュ、<mt:loop>、<mt:for>