IFブロック
詳細な条件による表示/非表示の制御 IFブロック
条件による表示/非表示の制御については、:veil ブロックによるモジュール内での部分的な表示の制御について解説しましたが、ここでは、より詳細な条件による制御を行う IFブロックについて解説します。
IFブロックの記述例
<!-- BEGIN_IF [%{PAGE}/gte/5] --> 5ページ以上です <!-- ELSE_IF [%{PAGE}/eq/4] --> 4ページです <!-- ELSE --> 3ページ以下です <!-- END_IF -->
上記の記述は、グローバル変数%{PAGE} が5以上の場合は「5ページ以上です」を表示、4の場合は「4ページです」、それら以外の場合は「3ページ以下です」を表示するという意味を持っています。
BEGIN_IF部分には、条件式の指定として[]の中にa-blog cmsのURLコンテキストのように 値/オプション/値 と指定します。またネスト(入れ子)にすることもできます。
<!-- BEGIN_IF [a-blogcms/lk/cms] --> cms <!-- ELSE --> not cms <!-- END_IF -->
基準となる値を左側に、対象を右側にしてください。例えば上記の「含まれる」では、「a-blogcms」の中に「cms」があるかを判断しています。「cms」の中に「a-blogcms」があるか、ではない点に注意してください。書く順番が重要になります。
注意事項
また、演算する値に改行が含まれるとIFブロックが機能しなくなるため、改行を含む変数 {hoge} などを使うときは、 [delnl] の校正オプションと併用します。
// {hoge}に改行が入る場合 <!-- BEGIN_IF [{hoge}[delnl]/eq/true] --> IFブロックは機能します <!-- END_IF --> <!-- BEGIN_IF [{hoge}/eq/true] --> IFブロックは機能しません <!-- END_IF -->
オプション
演算子 | 条件 | 意味 |
---|---|---|
eq | = | 等しい |
neq | != | 等しくない |
gt | > | より大きい |
gte | >= | 以上 |
lt | < | より小さい |
lte | <= | 以下 |
lk | LIKE | 含まれる |
nlk | NOT LIKE | 含まれない |
re | REGEXP | 指定した正規表現に合致する |
nre | NOT REGEXP | 指定した正規表現に合致しない |
em | EMPTY | 値が空("0"は空と判定されます) |
nem | NOT EMPTY | 値が空("0"は空と判定されます)ではない |
isset | ISSET | 値が空でない("0"も値があると判定されます) |
nisset | NOT ISSET | 値が空である("0"も値があると判定されます) |
テンプレート内での実行順序
テンプレートエンジンの実行順序は以下のようになります。
- インクルードを解決
- インクルード処理と同時にグローバル変数を解決
- タッチモジュールを解決(デフォルトON)
- モジュール類を内側から解決(同じ階層の場合は下から)
- IFブロックを解決
IFブロックの解決は一番最後に解決される為、条件式でグローバル変数やモジュールの変数も使用できます。 またモジュールのループ内でも動作します。
AND演算子とOR演算子
IFブロックではバージョン2.1.1からANDとOR演算子が使えるようになりました。AND演算子を使えば、両方の条件を満たした際、満たさなかった際の処理が出来ます。OR演算子を使えば、どちらか一方の条件を満たした際、満たさなかった際について処理できます。
AND演算子の記述例
<!-- BEGIN_IF [3/gt/2/_and_/2/lt/4] --> <p>条件を満たします</p> <!-- ELSE --> <p>条件を満たしません</p> <!-- END_IF -->
このソースのように判定したい条件同士を、_and_でつないであげることによって判定を行うことができます。上のソースの場合、3 > 2、2 < 4は両者とも条件を満たしますので、条件を満たしますが出力されます。
OR演算子の記述例
<!-- BEGIN_IF [4/lt/2/_or_/2/eq/2] --> <p>条件を満たします</p> <!-- ELSE --> <p>条件を満たしません</p> <!-- END_IF -->
このソースのように判定したい条件同士を、_or_でつないであげることによって判定を行うことが出来ます。上のソースの場合、4 < 2は条件を満たしませんが、2 = 2は条件を満たしますので、条件を満たしますが出力されます。