MT4から追加されたMTIfタグ
皆さんはじめまして方川です。
今回、あたらしく追加されたタグ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>
上記結果:こんな使い方もできます
条件式を使いこなして是非効率のいい構築を目指してください。ではでは。