MTIf タグの使い方の注意点

2021-04-23
2分で読了
更新: 2025-12-14

目次

今回のケースはレアかもしれませんが、複雑なテンプレートを書くときにひょっとしたら陥るかも?という注意点をご紹介します。

STEP 1

はじめに下記のようなシンプルなグローバルテンプレート作成します。


STEP 2

このテンプレートを任意のサイトのインデックステンプレートで読み込みます。

このテンプレートを再構築すると下記のように表示されます。

こんにちは

STEP 3

message グローバルテンプレートの名前を「 _message 」に変更します。先ほどのインデックステンプレートを再構築すると、テンプレートが見つかりませんというエラーになります。

STEP 4

インクルードするテンプレートの存在が不確かなときは下記のようにして mt:If tag="" で囲ってあげれば、そのテンプレートが存在しない場合にはエラーになりません。


  

STEP 5

ここまでは特に問題ありませんが、問題はテンプレートが存在するときです。先ほど「 _message 」に変更したテンプレート名を「 message 」に戻して、インデックステンプレートを再構築します。

すると、下記のように表示されます。

こんにちはこんにちは

理由

MT のソースコードまでは見ていませんが、まず最初の の段階で mt:Include タグが評価されるので、モジュールが存在する場合はそのモジュールの中身のテンプレートも評価されます。

今回の例で言うと、message モジュールの中の が評価された時点で hello 変数が定義されます。

その後、mt:If タグの中の で再度 message モジュールの中身が評価され、append="1" が付いているため、先に mt:If タグが評価された時点で定義された messageappend されてしまうわけです。

このようなケースはレアでしょうが、mt:If tag="Include" のような使い方をする場合は注意しましょう。

この記事をシェア

関連記事