if
種別: コマンド

書式:
{%if ○%}

{%endif%}

{%if ○%}

{%else%}

{%endif%}

(○:条件式 / △:条件式が真の場合の表示内容 / □:条件式が偽の場合の表示内容)

解説
 ifは条件分岐を行うためのコマンドで、コマンドタグ {%if 条件式%} から始まり、コマンドタグ {%endif%} で終わります。偽の場合の表示内容も同時に定義するには、コマンドタグ {%else%} を使用します。{%if 条件式%}開始タグ{%endif%}終了タグと呼び、開始タグから終了タグまでの間をifブロックと呼びます。
条件式を評価するための演算子としては、プロパティが定義されているかどうかを評価するための defined と、反転演算子の ! が実装されています。

 条件式 "defined プロパティA" は、プロパティAが定義されているかどうかを評価し、定義されている場合は真、定義されていない場合は偽を返します。ここで言う「定義されている」とは、一文字以上の値が設定されているかどうかを指します。
条件式に反転演算子を付加することで、条件式を反転することが可能です。つまり、先ほどの条件式に反転演算子を付加し "! defined プロパティA" とすることで、プロパティAが定義されていない場合に真を返すようになります。

Example
{%if defined プロパティA%}
  プロパティAが定義されている場合に表示する内容
{%endif%}

{%if defined プロパティA%}
  プロパティAが定義されている場合に表示する内容
{%else%}
  プロパティAが定義されていない場合に表示する内容
{%endif%}

{%if ! defined プロパティA%}
  プロパティAが定義されていない場合に表示する内容
{%endif%}

{%if ! defined プロパティA%}
  プロパティAが定義されていない場合に表示する内容
{%else%}
  プロパティAが定義されている場合に表示する内容
{%endif%}

 以下のようにネストすることで、より複雑な条件分岐を行うことも可能です。タグのインデントは必須ではありませんが、対応するタグが分かりやすいようにインデントしておくことをお勧めします。

Example
{%if defined プロパティA%}
  {%if defined プロパティB%}
    プロパティA, プロパティBの両方が定義されている場合に表示する内容
  {%else%}
    プロパティAのみ定義されている場合に表示する内容
  {%endif%}
{%else%}
  {%if defined プロパティB%}
    プロパティBのみ定義されている場合に表示する内容
  {%else%}
    プロパティA, プロパティBの両方が定義されていない場合に表示する内容
  {%endif%}
{%endif%}

 開始タグ内の if と条件式、演算子の間は、一つ以上の空白で区切られており、開始タグと終了タグ、{%else%} タグのそれぞれの間は、少なくとも1行以上なければなりません。また、開始タグと終了タグの数は同じでなければなりません。

Example
! 悪い例: 開始タグ内の条件式、演算子の間には空白が必要
{%if!defined HTML.TITLE.value%}

! 悪い例: {%if 〜%} と {%else%} の間は1行以上必要
! (このようなケースは {%if ! defined 〜%} を使いましょう)
{%if defined HTML.TITLE.value%}
{%else%}
タイトルが定義されていません
{%endif%}

! 悪い例: {%else%} と {%endif%} の間は1行以上必要
! (このようなケースは {%else%} を省略しましょう)
{%if defined HTML.TITLE.value%}
$HTML.TITLE$
{%else%}
{%endif%}

 具体的な使用例を以下に示します。

Example
! FORM.ICON.file が定義されている場合のみアイコン選択欄を表示
{%if defined FORM.ICON.file%}
  アイコン: $FORM.ICON$ [ <a href="$DATA.ICON_LIST$">List</a> ]
{%endif%}

! FORM.NAME.fixed_value が定義されていなければ名前欄を表示
! 表示する内容はこのように複数行でも構いません
{%if ! defined FORM.NAME.fixed_value%}
  <tr>
    <td>お名前</td>
    <td>$FORM.NAME$</td>
  </tr>
{%endif%}