グローバル・モディファイアを自由自在に使う方法
閑話
ここの所、WordPressの記事が続いた為に「4n5はMTを捨てたのか」とご心配の方々。
ご心配なく、私はこれからもMTユーザーです。
そして今日も、紹介するのは一風変わったタグの使い方です。
なお、本記事の動作はMT4.261及びMTOS4.261で検証済みです。
グローバル・モディファイア
Movable Typeのグローバル・モディファイアはMTタグに機能を付加できる便利な機能です。
グローバル・モディファイアはタグの種類や機能に左右されずに使えて非常に便利です。
特に以下の四つを私は多用しています。
これらは非常に便利で、私のタグ使いには必須と言っても過言ではありません。
ここまで便利だと……欲が出てきます。
グローバル・モディファイアがMTタグ以外でも使えないか、という欲が。
流石にMTタグ以外で使う事はできませんが、それに限りなく近い方法を紹介します。
その鍵となるのはMTIf
タグです。
MTIf
タグでグローバル・モディファイア
MTIf
タグの説明は省略するのでまだ知らない人は公式タグリファレンスの内容を参照してください。
さて皆さん、条件分岐タグのMTIf
でグローバル・モディファイアが使えるのか疑ってますね。
もちろん使えます。
例えば、こんな感じです。
<MTIf tag="BlogID" upper_case="1">
http://www.example.com/
</MTIf>
この場合では、upper_caseを使っているため、HTTP://WWW.EXAMPLE.COM/
と大文字で出力されます。
MTIf
タグでグローバル・モディファイアが使えるという事、MTタグ以外を対象にできる事が伝わったかと思います。
私の最も大胆な使い方は以下になります。
<MTIf tag="BlogID" regex_replace="/\s+\n/g","\n">
<html>
<body>
中略
</body>
</html>
</MTIf>
ページ全体から空白行を取り除く、という目的のために使ってみました。
MTIf
タグで使う為の必須条件
たった二つの例を紹介しただけですが、MTIf
タグでグローバル・モディファイアを使う為の必須条件にお気づき頂けたでしょうか。
それはtag="BlogID"
、つまりMTIf
タグの結果が真になる条件が必須です。
条件結果が真にならなければ、MTIf
タグで囲った部分が出力されず、グローバル・モディファイアが機能する事はありません。
条件結果が真になるのであれば、変数でもタグでも何でも構いません。
これは利用する環境に応じて変わるでしょうが、注意したいのはカウント系のタグは避けましょう。
カウント系のタグはそのほとんどが出力の度にデータベースへアクセスして数を数えており、非常に高負荷です。
私はまず予約変数、予約変数が使えないテンプレートでは記述量が少ないMTBlogIDタグを条件に利用しています。
MTIf
タグ以外でグローバル・モディファイア
全てのタグで試したわけではありませんが、MTIf
タグ以外のタグでもグローバル・モディファイアは使えます。
使えますが、MTIf
タグより使い勝手の良いタグは見つかっていません。
コメント欄でお教え頂きましたが、『と_こ』さんが試されたMTUnless
タグの方がMTIf
タグより使い勝手が良さそうです。
どうやら、MTFor
タグが一番記述量が少なくなるようです。
MTUnless
タグでグローバル・モティファイア
<MTUnless regex_replace="/\s+\n/g","\n">
<html>
<body>
中略
</body>
</html>
</MTUnless>
ただ、MTUnless
タグの場合には条件を設定しなかった場合の結果が真になるという内部処理が前提となるため、システムの仕様変更により使えなくなる可能性が考えられます。
例えばタグの使用に条件が必須になるとか。
それでも、それまでは間違いなく一番の使い勝手だと思います。
更に上のMTFor
タグを見つけました。
『と_こ』さん、ありがとうございます。
MTFor
タグでグローバル・モティファイア
恐らく、MTFor
タグ以上に、グローバル・モディファイアを自在に使うための記述量が少ないタグはないでしょう。
<MTFor regex_replace="/\s+\n/g","\n">
<html>
<body>
中略
</body>
</html>
</MTFor>
MTFor
タグについては以前の記事を参照して下さい。
簡単に説明すると、MTFor
タグは開始と終了が同じ値の場合には一回だけループします。
さらに開始と終了の値はそのどちらも、省略すると0が自動設定されます。
そのため上記のMTFor
は機能するのです。
コメント[2]
コメント投稿フォーム
コメントを投稿するにはJavaScirptが必要です。ブラウザのJavaScriptを有効にしてください。
トラックバック[0]
トラックバックはまだありません。
はじめまして、楽しく読ませていただいています。
これは便利と思い色々試してみたところ、MTIf タグとほとんど変わりませんが、
MTUnless タグだと条件を設定していない場合に全てが真になるので、記述量はさらに減りました。
MTUnlessタグとは盲点でした。
記述量もさることながら、条件を設定していない分だけ処理も軽そうな気がします。