45式::雑記
45式::雑記は、日々の事を記してないから日記ではなく雑記です。

グローバル・モディファイアを自由自在に使う方法

コメント
2件
トラックバック
0件

閑話

ここの所、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]

と_こ (2010年1月12日11:33) 返信

はじめまして、楽しく読ませていただいています。

これは便利と思い色々試してみたところ、MTIf タグとほとんど変わりませんが、
MTUnless タグだと条件を設定していない場合に全てが真になるので、記述量はさらに減りました。

4n5からと_こへの返信 (2010年1月12日23:06) 返信

MTUnlessタグとは盲点でした。
記述量もさることながら、条件を設定していない分だけ処理も軽そうな気がします。

コメント投稿フォーム

コメントを投稿するにはJavaScirptが必要です。ブラウザのJavaScriptを有効にしてください。

コメント投稿フォーム

トラックバック[0]

トラックバックはまだありません。

カテゴリ
アーカイブ
ヘルプ
Feed

フィードとは