mtde.info

Movable Type Developers Express

このカテゴリでは、Movable Type 4 で変数を扱う場合に必要となる「MTIf」などのIf系のテンプレートタグの説明を行います。

『If系』カテゴリ内のエントリ一覧

MTIf

2008年2月 1日 22:06 | Writer: apstar | 記事本文

MTIfテンプレートタグは、MTSetVar・MTSetVarBlock・MTSetVarTemplateテンプレートタグで値を与えた変数を利用し、条件分岐を行うためのものです。

モデファイアで条件を与え、「もし、(条件)を満たせば」が成立すると、MTIfブロック内部のコードが実行されます。

サンプルコード

以下のサンプルコードでは、Number変数へ5という値を代入し、MTIfで「もし、Number変数が5であったら」という条件分岐を行っています。eqモデファイアは、「指定した値が変数と同じであれば」という分岐を行うので、MTIfブロック内のMTGetVarにてNumber変数の値、つまり5が出力されます。

<MTSetVar name="Number" value="5">
<MTIf name="Number" eq="5">
   <MTGetVar name="Number">
</MTIf>

MTElse

2008年2月 1日 22:17 | Writer: apstar | 記事本文

MTElseテンプレートタグは、基本的にはMTIfテンプレートタグと対で用います。MTIfで条件分岐を満たさなかった場合の実行コードを記述するためのものです。

基本サンプルコード

以下のサンプルコードでは、Number変数へ3という値を代入し、MTIfで「もし、Number変数が5であったら」という条件分岐を行っています。eqモデファイアは、「指定した値が変数と同じであれば」という分岐を行うので、MTIfブロック内のMTGetVarは実行されず、MTElseブロック内のMTGetVarにてNumber変数の値、つまり3が出力されます(※Number変数の値は、5でなければすべてMTElse側で出力されます)。

また、MTIf中のMTElseタグは、閉じるタグは必要ないです。

<MTSetVar name="Number" value="3">
<MTIf name="Number" eq="5">
   <MTGetVar name="Number">は5です。
<MTElse>
   <MTGetVar name="Number">は5ではありません。
</MTIf>

Movable Type 4.1以降では拡張された

Movable Type 4.1以降では、MTElseテンプレートタグは、nameモデファイアと条件分岐モデファイアを付加して記述できるように拡張されています。これにより、「MTIfを満たさなければ」という2択の条件分岐よりも多くの、1対多の分岐処理を行えるようになりました。

拡張されたサンプルコード

以下のサンプルコードでは、Number変数へ4という値を代入し、MTIfで「もし、Number変数が5であったら」という条件分岐を行っています。次のMTElseでは「もし、Number変数が7であったら」という判断もあわせて行っています。このサンプルの場合は、Number変数の値は4であるので、それらはすべて通過し、一番最後のMTElseで出力されます)。

<MTSetVar name="Number" value="4">
<MTIf name="Number" eq="5">
   <MTGetVar name="Number">は5です。
<MTElse name="Number" eq="7">
   <MTGetVar name="Number">は7です。
<MTElse>
   <MTGetVar name="Number">は5と7以外の数です。
</MTIf>

MTElseIf

2008年2月 1日 22:41 | Writer: apstar | 記事本文

Movable Type 4.1より追加されたMTElseIfテンプレートタグは、MTElseIfテンプレートタグの拡張版です。ひとつのMTIfとあわせて用います。先頭のMTIfのnameモデファイアで指定した変数名を、多数の条件分岐にかけるためのブロックタグです。

サンプルコード

以下のサンプルコードでは、Number変数へ3という値を代入し、MTIfを含むMTElseIfで「もし、Number変数が1,2,3,4,5であったら」という条件分岐を行っています。eqモデファイアは、「指定した値が変数と同じであれば」という分岐を行うので、6行目のMTElseIfブロック内の条件分岐でひっかかり、そのMTElseIfブロック内のMTGetVarにてNumber変数の値、つまり3が出力されます。

1対多の条件分岐においては、MTElseよりはMTElseIfのほうがシンプルなコードとなります。

<MTSetVar name="Number" value="3">
<MTIf name="Number" eq="1">
   <MTGetVar name="Number">は1です。
<MTElseIf eq="2">
   <MTGetVar name="Number">は2です。
<MTElseIf eq="3">
   <MTGetVar name="Number">は3です。
<MTElseIf eq="4">
   <MTGetVar name="Number">は4です。
<MTElseIf eq="5">
   <MTGetVar name="Number">は5です。
<MTElse>
   <MTGetVar name="Number">は1,2,3,4,5ではありません。
</MTIf>

MTUnless

2008年2月 1日 22:50 | Writer: apstar | 記事本文

MTUnlessテンプレートタグは、MTIfとまったく逆の動作をするテンプレートタグです。

モデファイアなどはMTIfと同じものが使え、「もし、(条件)を満たさなければ」が成立すると、MTUnlessブロック内部のコードが実行されます。

サンプルコード

以下のサンプルコードでは、Number変数へ3という値を代入し、MTUnlessにて3でなければ「Numberは3ではありません」と出力され、3であればMTElse側のブロックで「Numberは3です」。と出力されます。

MTUnlessを満たさない場合の分岐はMTElse内に記述できます。また、閉じるタグは/MTIfではなく/MTUnlessです。

<MTSetVar name="Number" value="3">
<MTUnless name="Number" eq="3">
   <MTGetVar name="Number">は3ではありません。
<MTElse>
   <MTGetVar name="Number">は3です。
</MTUnless>

MTIf条件分岐モデファイア一覧

2008年2月 1日 23:00 | Writer: apstar | 記事本文

MTIf、MTElse、MTElseIf、MTUnless各テンプレートタグで使用できる条件分岐モデファイアは次の一覧のとおりです。

比較用モデファイア一覧

like
変数が含まれる場合(perl正規表現を利用可能)
eq
変数に一致した場合
ne
変数に一致しない場合
lt
変数より小さい場合
gt
変数より大きい場合
le
変数以下の場合
ge
変数以上の場合

サンプルコード

以下コードのCompare変数とNumber変数を任意の値に変更するだけで、各モデファイアの動作が確認可能です。

<!-- 比較用変数の準備、MTIfのモデファイアへセットされる -->
<MTSetVar name="Compare" value="10">

<!-- 比較に用いられる変数 -->
<MTSetVar name="Number" value="10">


<!-- 変数に含まれるか? -->
<p>likeモデファイア(含まれるか)</p>
<MTIf name="Number" like="$Compare">
   <MTGetVar name="Number">は<MTGetVar name="Compare">文字列が含まれます。
</MTIf>

<!-- 変数と一致するか? -->
<p>eqモデファイア(一致するか)</p>
<MTIf name="Number" eq="$Compare">
   <MTGetVar name="Number">は<MTGetVar name="Compare">と一致します。
</MTIf>

<!-- 変数と一致しないか? -->
<p>neモデファイア(一致しないか)</p>
<MTIf name="Number" ne="$Compare">
   <MTGetVar name="Number">は<MTGetVar name="Compare">と一致しません。
</MTIf>

<!-- 変数より小さいか? -->
<p>ltモデファイア(小さいか)</p>
<MTIf name="Number" lt="$Compare">
   <MTGetVar name="Number">は<MTGetVar name="Compare">より小さいです。
</MTIf>

<!-- 変数より大きいか? -->
<p>gtモデファイア(大きいか)</p>
<MTIf name="Number" gt="$Compare">
   <MTGetVar name="Number">は<MTGetVar name="Compare">より大きいです。
</MTIf>

<!-- 変数以下か? -->
<p>leモデファイア(以下か)</p>
<MTIf name="Number" le="$Compare">
   <MTGetVar name="Number">は<MTGetVar name="Compare">以下です。
</MTIf>

<!-- 変数以上か? -->
<p>geモデファイア(以上か)</p>
<MTIf name="Number" ge="$Compare">
   <MTGetVar name="Number">は<MTGetVar name="Compare">以上です。
</MTIf>
エントリ
タグ
はじめに
導入編
ローカル環境
変数
サンプル
その他
トラブル集
2008 mtde.info