Movable Type CMSプラットフォーム Movable Type
ドキュメントサイト

Blogブログ

拡張された MTElse タグを利用した複雑な条件分岐

MT4.1 では、MTElse ブロックタグも拡張され、テンプレートでより複雑な条件式を作成することができます。具体的には、MTElse ブロックタグでも MTIf, MTUnless ブロックタグと同じように条件式を持つことができるようになり、様々なプログラム言語にある elseif ステートメントと同じような記述が可能になりました。

MTElseMTIf ブロックタグで設定した条件式の値が false (偽) の場合に実行したい内容を囲むブロックタグです。拡張された機能を利用したサンプルの前に、MTElse ブロックタグの基本的な動作のサンプルを見てみましょう。

サンプルでは、変数 hoge に設定された値が foo かどうかで表示するメッセージを変更しています。

<$MTSetVar name="hoge" value="bar"$>

<MTIf name="hoge" eq="foo">
    <p>このテンプレートで設定された変数 hoge の値は foo です。</p>
<MTElse>
    <p>このテンプレートで設定された変数 hoge の値は foo ではありません。</p>    
</MTElse>
</MTIf>

サンプルの内容のテンプレートを構築すると、以下のような出力結果になります。

<p>このテンプレートで設定された変数 hoge の値は foo ではありません。</p>
conditional.png

テンプレートの最初の行では、MTSetVar ファンクションタグで変数 hoge に bar という値を設定しています。次にある MTIf のブロックでは、変数 hoge の値を利用した条件式があります。eq="foo"変数 hoge に設定された値が foo と等しいかどうか というものです。サンプルテンプレートでは、変数 hoge に設定された値が foo の場合、『このテンプレートで設定された変数 hoge の値は foo です。』というメッセージを表示します。もし、変数 hoge に設定された値が foo 以外の場合は、MTElse ブロックタグで囲まれた内容を処理し、『このテンプレートで設定された変数 hoge の値は foo ではありません。』というメッセージを表示します。

この結果からも、MTElse ブロックタグは、MTIf もしくは MTUnless ブロックタグでの条件式の値が false (偽) の場合に処理したい内容を囲むブロックタグだということがわかります。

複雑な条件式

サンプルテンプレートでは MTElse ブロックタグを利用して変数 hoge に設定された値が foo かどうかで表示するメッセージを変更しましたが、今度は変数 hoge に設定された値は foo ではないが、変数 fuga の値は bar であるというような、複雑な条件式を作成してみます。このような複雑な条件式を作成するのに便利なのが、MT4.1 で拡張された MTElse ブロックタグの利用法です。こちらもサンプルを用意してみます。

<$MTSetVar name="hoge" value="foo"$>
<$MTSetVar name="fuga" value="bar"$>

<MTIf name="hoge" eq="bar">
    <p>変数 hoge に設定された値が bar の場合に表示されるメッセージ</p>
<MTElse name="fuga" eq="bar">
    <p>変数 hoge に設定された値が bar ではないが、変数 fuga に設定された値が bar の場合に表示されるメッセージ</p>
<MTElse>
    <p>変数 hoge に設定された値も、変数 fuga に設定された値も bar ではない場合に表示されるメッセージ</p>
</MTElse>
</MTElse>
</MTIf>

このサンプルの出力結果は以下のようになります。

<p>変数 hoge に設定された値が bar ではないが、変数 fuga に設定された値が bar の場合に表示されるメッセージ</p>

もし、変数 hoge, fuga 両方に設定する値を foo にした場合の出力結果は以下のようになります。

<p>変数 hoge に設定された値も、変数 fuga に設定された値も bar ではない場合に表示されるメッセージ</p>

また、変数 hoge に設定する値を bar にした場合は、MTElse ブロックの内容は処理されず、以下のような出力結果になります。

<p>変数 hoge に設定された値が bar の場合に表示されるメッセージ</p>

最初の2行では、変数 hoge に foo という値を、変数 fuga には bar という値を設定しています。MTIf, MTElse のブロックには各々条件式があり、MTIf での条件式の値が false (偽) の場合は MTElse の条件式が処理されます。

拡張された MTElse ブロックタグは、単純に変数の値が foo かどうかというような条件分岐ではない2つの条件が重なる複雑な条件分岐を行いたい場合や、複雑になってしまうテンプレートをわかりやすく書き直し、汎用的にすることも可能になります。

  • このエントリーをはてなブックマークに追加