2005年03月06日

Movable Type プラグイン作成入門(1)

Movable Type はプラグインを利用することで新たな機能を柔軟に追加することができる。
プラグインにはグローバルフィルター、変数タグ、コンテナタグ、条件タグがある。

まずはとても小さなグローバルフィルターからはじめてみよう。
例) RedEzo プラグイン ~ "tech-ezo" という文字列を赤くする
package MT::Plugin::ColorEzo;
use strict;
use MT::Template::Context;

# Global Filter RedEzo の定義
MT::Template::Context->add_global_filter(
	RedEzo => \&ChangeRedEzo);

# Filter によって起動されるメソッド
sub ChangeRedEzo {
    my($text, $arg, $ctx) = @_;
    $text=~s/(tech-ezo)/<font color='red'>$1<\/font>/ig;
    $text;
}
1;


package MT::Plugin::ColorEzo;
関数などの名前が衝突しないように package を指定。package の名前は任意だが MT::Plugin::~ という形にするのが慣習。

MT::Template::Context->add_global_filter(RedEzo=>\&ChangeRedEzo);
RedEzo というフィルタが ChangeRedEzo というメソッドを呼びだすことを指定。

my ($text, $arg, $ctx) = @_;
フィルターには3つの引数が渡される。一つ目はフィルターをかける文字列。2つ目はテンプレートから渡される引数。3つ目は MT::Template::Contextオブジェクト。

$text=~s/(tech-ezo)/<font color='red'>$1<\/font>/ig;
"tech-ezo" という文字列を font タグではさむ処理。

$text;
フィルターによって呼び出されるメソッドは、最後に結果の文字列を返す。

ここで作ったプラグインを RedEzo.pl という名で保存し、plugins ディレクトリにアップロードしておこう。

RedEzoフィルターを利用するには変数タグやコンテナタグのアトリビュートとして指定すればよい。

<$MTEntryTitle RedEzo='1'$>
記事のタイトルに対して RedEzo フィルターを適用

<MTEntries lastn="10" RedEzo='1'>
...
</MTEntries>
MTEntries ループの中で RedEzo フィルター適用

Posted by augustus at 2005年03月06日 17:19 | TrackBack
Comments
Post a comment









Remember personal info?