ある理由で MT Regex Plugin を使用したのでメモ。この MT Regex Plugin は正規表現による条件分岐や変換など、様々なカスタマイズが可能になる高機能プラグイン。
プラグイン本体をダウンロードしたら解凍しましょう。中には 5つのファイルがあるはずです。そのうち、license.txt と readme.txt は動作には関係ないので、残りの 3つをサーバにアップします。アップするディレクトリは下記の通り。
- regex.pl → (mt home)/plugins/regex.pl
- regex.pm → (mt home)/extlib/bradchoate/regex.pm
- postproc.pm → (mt home)/extlib/bradchoate/postproc.pm
bradchoate というディレクトリはデフォルトでは存在しないので、なければ作ってください。インストールはこれで終了。
これで <MTRegexDefine>、<MTIfMatches>、<MTIfNotMatches>、<MTRegex>、<MTGrep> という 5つの MTタグと、「regex="N | name"」 というグローバルフィルタが利用可能になります。
実際の使い方ですが、もっとも簡単な使い方が下記。「-D」 と記述があった場合、その部分をすべて 「example.gif」 に置き換えたいなんて場合、まず最初に正規表現を定義します。これはこの正規表現を使用するテンプレート内に記述。
<MTRegexDefine>s|:-D|<img src="/example.gif" height="10" width="10" alt="" />|g</MTRegexDefine>
で、お次にこれを適用したい MTタグに下記のようにグローバルフィルタを適用。
<$MTEntryBody regex="1"$>
これで、<$MTEntryBody$> 内に 「-D」 という記述があった場合は、すべて 「example.gif」 に置き換えられてソースが生成されます。最初の正規表現を定義する記述が複数記述されていれば、それらすべてが適用されます。
ひとつのテンプレート内で複数の正規表現を使い分けたい場合は、下記のようにそれぞれ任意の名前を付けて定義することも可能。
<MTRegexDefine name="patt1">s|強調|<strong>強調</strong>|g</MTRegexDefine> <MTRegexDefine name="patt2">s|google\(([^\)]+)\)|<a href="http://www.google.co.jp/search?q=$1" title="Google This!">$1</a>|g</MTRegexDefine>
グローバルフィルタの適用は下記のように。
<MTEntries> <$MTEntryTitle regex="patt1"$> <$MTEntryBody regex="patt2"$> <$MTEntryMore regex="patt1 patt2"$> </MTEntries>
こんな書き方でも可。
<MTEntries regex="patt1 patt2"> <$MTEntryTitle$> <$MTEntryBody$> </MTEntries>
「強調」 というテキストを <strong> でマークアップ。「google(テキスト)」 という記述があったら、Google の検索結果へのリンクへ変換しています。
その他にパターンマッチで条件分岐を実現する <MTIfMatches>、<MTIfNotMatches> タグも便利。
例えば、<$MTEntryBody$> に 「ブログ」 と記述があったときだけ表示させるとか、
<MTEntries> <MTIfMatches pattern="m/ブログ/"> <$MTEntryBody$> </MTIfMatches> </MTEntries>
同じく、
<MTRegexDefine name="match1">m/ブログ/</MTRegexDefine> <MTEntries> <MTIfMatches pattern="match1"> <$MTEntryBody$> </MTIfMatches> </MTEntries>
投稿者が brad、ben、mena のいずれかだったときのみ表示するとか、
<MTEntries> <MTIfMatches var="EntryAuthor" pattern="m/(brad|ben|mena)/i"> <$MTEntryBody$> </MTIfMatches> </MTEntries>
逆の場合は <MTIfNotMatches> を使ってこんな感じとか、
<MTEntries> <MTIfNotMatches var="EntryAuthor" pattern="m/(brad|ben|mena)/i"> <$MTEntryBody$> </MTIfNotMatches> </MTEntries>
エントリー数が 1000件の時だけ表示するとか、
<MTIfMatches var="BlogEntryCount" value="1000"> <strong>1,000 エントリー達成!</strong> </MTIfMatches>
使いこなせば非常に役に立つこと間違いなし。