MovableType(以下MT)の孫の手プラグインの紹介その2。
今回はCompareプラグインです。
MTでテンプレートを触っていて、
「こういう場合にだけ、こうしたい」
って思うこと、よくありませんか?
例えば、「カテゴリーがこの時にだけ、この画像を表示したい」とか、「エントリーの文字数が多いときだけ、折りたたみ式あるいはページ送り式にしたい」とか。
それらを個々で解決するプラグインは数々あります。
でもその「?の時に」という条件だけで良ければ、たった一つのプラグインで解決するかもしれません。
そのお手伝いをするのが、Compareプラグインです。
これは、かなり自由度の高い「変数比較の条件タグ」を提供するものです。
ダウンロード・インストール
Compare公開サイトの Download リンクをクリックして、"Compare.tar.gz"をダウンロードします。
(バージョン:1.1(2006/08/08現在))
Linuxや Mac OSX など、Unix系のOSをお使いなら、解凍方法は分かると思います。
(MacならダブルクリックするだけでOK。)
Windows使用の方で解凍方法が分からない方は、申し訳ありません、そこまで面倒見切れないので自分で調べてください。
(参考:google検索[Windows+tar.gz+解凍])
解凍すると、2つのファイルが生成されますが、必要なのは Compare.pl だけです。
これをMTのプラグインフォルダ([MT]/plugins/)にコピー(アップロード)すれば、インストールはOK。
念のため、MTのプラグイン管理画面を開いて Compare が表示されることを確認しましょう。
追加される機能
Compareプラグインは、9つの条件タグをMTに追加します。
まずは、以下の表を参照してください:
| タグ名 | 対応する 演算子 | イメージ |
|---|---|---|
| MTIfEqual | = | a=b |
| MTIfNotEqual | ≠ | a≠b |
| MTIfGreater | > | a>b |
| MTIfGreaterOrEqual | ≧ | a≧b |
| MTIfLess | < | a<b |
| MTIfLessOrEqual | ≦ | a≦b |
| MTIfBetween | ≦?≦ | lower≦a≦upper |
| MTIfBetweenExclusive | <?< | lower<a<upper |
| MTIfNotBetween | NOT(≦?≦) | NOT(lower≦a≦upper) (a<lower or upper<a) |
こんな感じで、9種類の条件比較の機能を提供します。
使い方0:基本
まず、MTIfEqualを例にとって基本的な使い方の解説をします。
早速↓使用例:
<MTEntries>
<MTIfEqual a="[MTEntryCategory]" b="Private">
<img src="/images/private.png" alt="private" />
</MTIfEqual>
<$MTEntryTitle$><br />
</MTEntries>
これは、「エントリーのタイトルを全て表示する、ただし、カテゴリーが『private』だったら、エントリータイトルの前に private.png を表示する」というもの。
解説します。
- <MTIfEqual>?</MTIfEqual>の内容は、タグの中のa属性とb属性が「a=b」の場合のみ実行(表示)されます。
- <MTIfEqual>の、a属性に注目。[]の中に「MT?」と書いてあります。
[MT?]と書くとその部分をMTタグと解釈してくれるのです。この場合は<$MTEntryCategory$>と解釈され、その時点のエントリーのメインカテゴリー名に置き換えられるわけです。
これはb属性にも適用できます。
この例はMTIfEqualですが、他のタグでも基本的な概念は同じです。
使い方1:IfEqualとIfNotEqual
詳しい使い方。3つに分けます。
まずは、「等しい」または「等しくない」を判定する2つのタグの解説。
- MTIfEqual
- aがb(もしくはb1,b2,... のいずれか)と等しいかどうかを判定する条件タグ
- MTIfNotEqual
- aがb(およびb1,b2,... の全て)と等しくないかどうかを判定する条件タグ
要するに、MTIfEqualとMTIfNotEqualは全く正反対の条件判断をするタグです。
続いて、これら2つのタグに共通の属性。
- a
- [必須]比較対象の指定
- b, b1, b2...
- 比較する値。最低1つ必須。いくつでも指定可能。
- numeric
- 数値として比較する場合は"1"を指定する(デフォルトは文字列比較)
- case_sensitive
- 文字列比較の場合に、半角アルファベットの大文字・小文字を区別する場合に"1"を指定する(デフォルトは大文字・小文字を区別しない。numericが指定されていれば無効)
b属性の方は、「bの後に数字が0個以上続くもの」という定義なので、「b00」とか「b111111111111」とかでもOK。
また、numericとcase_sensitiveは他の条件タグでも共通です。
使い方2:IfGreater,IfGreaterOrEqual,IfLess,IfLessOrEqual
次に、「大きい」「小さい」を判定する4つのタグの解説。
- MTIfGreater
- a>bかどうかを判定する条件タグ
- MTIfGreaterOrEqual
- a≧bかどうかを判定する条件タグ
- MTIfLess
- a<bかどうかを判定する条件タグ
- MTIfLessOrEqual
- a≦bかどうかを判定する条件タグ
つまり、MTIfEqualやMTIfNotEqualと違い、比較するのはaとbの2つの値だけです。
一応、属性の解説。
- a
- [必須]比較対象の指定
- b
- [必須]比較する値
- numeric
- 数値として比較する場合は"1"を指定
- case_sensitive
- 大文字・小文字を区別する場合に"1"を指定
使い方3:IfBetween,IfBetweenExclusive,IfNotBetween
最後に、「範囲内」「範囲外」を判定する3つのタグの解説。
- MTIfBetween
- aがlower以上upper以下かどうかを判定する条件タグ
- MTIfBetweenExclusive
- aがlowerより大きくupper未満かどうかを判定する条件タグ
- MTIfNotBetween
- aがlower未満か、もしくはupperより大きいかどうかを判定する条件タグ
つまり「lower?upper」の「範囲内」か「範囲外」か、ということですね。
属性の解説。
- a
- [必須]比較対象の指定
- lower
- [必須]比較する値(下限)
- upper
- [必須]比較する値(上限)
- numeric
- 数値として比較する場合は"1"を指定
- case_sensitive
- 大文字・小文字を区別する場合に"1"を指定
ここで「<MTIfNotBetweenExclusive>はないの?」と思われた方も多いはず。
たぶん、名前が長いから敬遠されると思ってわざと定義しなかったんだと思われます。
それに、↓以下のようにすればその機能を実現できます。
<MTIfBetweenExclusive a="?" lower="?" upper="?"><MTElse>
?<!-- この内容は a≦lower もしくは uper≦a の場合のみ表示されます。 -->
</MTElse></MTIfBetweenExclusive>