エンジニアブログ

エンジニアブログ
MT技術情報

MT4から追加されたMTIfタグ

方川 2007年07月23日

皆さんはじめまして方川です。

今回、あたらしく追加されたタグMTIfについて解説させていただきます。
このタグを使うことで、状況に応じてテンプレートのコードを選択することができます。
以前のバージョンでもプラグインによって提供されていたものがありますが、
MT4ではデフォルトで実装です。
また、MTSetVar、MTSetVarBlockと組み合わせて使うことで複雑な条件に
対応したコードを構築できるようになります。
実際に、MT4のデフォルトテンプレート(MainIndex)を見てみましょう。

<MTSetVar name="body_class" value="mt-main-index">

<MTSetVar name="main_template" value="1">

<MTSetVar name="main_index" value="1">

<MTSetVar name="sidebar" value="1">

<MTSetVar name="module_recent_entries" value="1">

<MTSetVar name="module_category_archives" value="1">

<MTSetVar name="module_author_archives" value="1">

<MTSetVar name="module_monthly_archives" value="1">

このようにページの先頭にMTSetVarコードの宣言部分が並んでいることに
気がつくと思います。
この宣言部分こそ、MTIfタグを生かす為の重要な箇所です。
実際にこの宣言部を生かしている場所はどこかといいますと、すぐ下で宣言されている
MTIncludeタグです。

<$MTInclude module="Header"$>

ここで"Header"というモジュールを呼んでいますね。これが重要です。
モジュールは部品として利用されるもので、できる限り汎用的であるべきです。
限定的なコードの構築では、テンプレートに取り込むときに、コードの記述によっては
使えないことがあるからです。その都度、不都合な部分を書き換えたモジュールを複数用意する
とういうことになってしまいます。ですが、MTIfを利用することで、より汎用的なものとして構築する
ことができます。
では、このモジュールではどのようにMTIfが宣言されているか見てみましょう。

<MTIf name="main_index">

<tlink rel="EditURI" type="application/rsd+xml" title="RSD" href="<$MTLink template="rsd"$>" />

</MTIf>

これはHeaderモジュール内の一部です。MainIndexでMTSetVarにより宣言されていた"main_index"がname属性で指定され使われていることに注目してください。
この行の意味はもしname属性と一緒にvalue属性が設定され、尚且つvalue属性で設定した値が0以外なら、タグで括った部分を利用するということになります。ではこの"mainindex"の値を設定しなかったらどうなるかといいますと、タグで括った箇所は無視されるのです。
ようするにMainIndexテンプレートであるか、どうか、もしそうであるなら、このコードを記述する。という感じです。
説明がくどくなってしましましたが、それでは、実際にMTIfの仕様をざっと記載します。
是非試してください。

■書式


<MTIf 属性1 [属性2]>


 真ブロック... [MTIfを入れ子にできます]...


[<MTElse>]


偽ブロック... [MTIfを入れ子にできます]...


</MTIf>


■属性1 必修です
name="文字列"

■属性2 必要に応じて以下を選択します

  • 指定なし
value属性が設定されていて、尚且つ、0以外である場合真ブロックが利用されます
  • like
value属性に指定されている値/文字列内にlikeで指定した値/文字列が含まれているとき真ブロックが利用されます
  • eq
eqで指定した値/文字列とvalueの値/文字列が一致するとき真のブロックが利用されます
  • ne
neで指定した値/文字列とvalueの値/文字列が一致しないとき真のブロックが利用されます
  • lt
ltの値/文字列 > valueの値/文字列が成立するとき真のブロックが利用されます
  • gt
gtの値/文字列 < valueの値/文字列が成立するとき真のブロックが利用されます
  • le
leの値/文字列 >= valueの値/文字列が成立するとき真のブロックが利用されます
  • ge
geの値/文字列 <= valueの値/文字列が成立するとき真のブロックが利用されます


上記の属性2の例です。使い方は一緒です。

<MTSetVar name="ohayou" value="おはよう">

<MTSetVar name="konnitiwa" value="こんにちは">

<MTIf name="ohayou" like="よう">

<p>選択されました</p>

</MTIf>

上記結果:選択されました

<MTIf name="konnitiwa">

<p>選択されました</p>

</MTIf>

上記結果:選択されました

<MTIf name="ohayou" lt="は">

<p>この場合は文字コードの大小で</p>

</MTIf>

上記結果:この場合は文字コードの大小で

<MTSetVarBlock name="ketugou"><$MTGetVar name="ohayou"$><$MTGetVar name="konnitiwa"$></MTSetVarBlock>

<MTIf name="ketugou" eq="おはようこんにちは">

<p>こんな使い方もできます</p>

</MTIf>

上記結果:こんな使い方もできます

条件式を使いこなして是非効率のいい構築を目指してください。ではでは。