Movable Type プラグイン作成入門(2)
グローバルフィルターに引数を渡すことによってもっと柔軟な処理を行うことが可能だ。
例) ColorEzo プラグイン --- "tech-ezo" という文字列に任意の色をつける
package MT::Plugin::ColorEzo;
use strict;
use MT::Template::Context;
MT::Template::Context->add_global_filter(ColorEzo=>\&ClrEzo);
sub ClrEzo {
my($text, $arg, $ctx) = @_;
$text=~s/(tech-ezo)/<font color='$arg'>$1<\/font>/ig;
$text;
}
1;
前回の例とほとんど同じである。
package MT::Plugin::ColorEzo;
関数などの名前が衝突しないように package を指定。
MT::Template::Context->add_global_filter(ColorEzo=>\&ClrEzo);
ColorEzo というフィルタが ClrEzo というメソッドを呼びだすことを指定。
my ($text, $arg, $ctx) = @_;
フィルターに渡される3つの引数。一つ目はフィルターをかける文字列。2つ目はテンプレートから渡される引数。3つ目は MT::Template::Contextオブジェクト。
つまり、色の指定に2つ目の引数を使えば良いのだ。
$text =~ s/(tech-ezo)/<font color='$arg'>$1<\/font>/ig;
"tech-ezo" という文字列を font タグではさむ処理。色の指定に上で渡された2つ目の引数を利用している。
$text;
フィルターによって呼び出されるメソッドは、最後に結果の文字列を返す。
ここで作ったプラグインを ColorEzo.pl という名で保存し、plugins ディレクトリにアップロードしておこう。
ColorEzoフィルターを利用するには変数タグやコンテナタグのアトリビュートとして指定すればよい。
<$MTEntryTitle ColorEzo='blue'$>
記事のタイトルに対して ColorEzo フィルターを適用。
ここで指定した blue がフィルターのメソッドの2つ目の引数として渡される。
<MTEntries lastn="10" ColorEzo='#AA8800'>
...
</MTEntries>
MTEntries ループの中で ColorEzo フィルター適用。
ここで指定した #AA8800 がフィルターのメソッドの2つ目の引数として渡される。
Posted by augustus at 2005年03月06日 17:48
| TrackBack