2005年03月06日

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
Comments
Post a comment









Remember personal info?