もうタイトルで全部言い切ってる気がしないでもないですが......
Movable Type (以下 MT) のテンプレート上で、例えば <mthoge>
のような 「mt」 から始まるタグを使おうとすると MT 側で行われるテンプレートタグのエラーチェックに引っかかって 「そのタグは存在しないよ」 って怒られちゃうんですよね。
テンプレートタグのエラーチェック自体は便利な機能ですし、本当にテンプレートタグを書こうとしてタイプミスしたり、タグを閉じ忘れた、構文を間違ったなんて場合に教えてくれるのでありがたいんですが、テンプレートタグじゃなく、文書内にたまたまこの条件に当てはまる記述があったときにそれまでチェックの対象になってしまい、困ることになります。
というのも、先日お仕事で XML 文書を MT から出力しようとしていて、たまたまその文書の仕様上、「mt」 から始まる要素があったためにエラーが出て再構築できないっていう罠にハマったからなんですが、それを replace モディファイアを使って回避してみましたのでメモがてらに書いておきます。あまりスマートな解決策じゃないですけどね......
最初は問題のタグを認識させるだけの簡単なプラグインでも書こうかなと思ったんですが、たかだかタグ 1つのためだけにめんどくせってことで却下しました。
具体的な例と解決方法
例として、<mtest />
みたいな要素をテンプレートに書いて再構築しようとしてみます。すると下記のような感じでエラーが帰ります。
単純に <
>
で囲まれていて、先頭の文字列が 「mt」 だと、テンプレートタグが書かれたと判断してチェックするようですし、標準の設定等でこのチェックを無効にすることはできないのでどうしようもない感じ。
ということで、下記のように replace モディファイアを使用して、テンプレート上の要素名が 「mt」 から始まらないようにしておいて、再構築時に置き換えして出力するという手を使って回避します。
<mt:Unless replace="mmtest","mtest"> <mmtest /> </mt:Unless>
まぁ、こんなケースにぶち当たるのはレアなケースだとは思いますが。