2005年03月07日

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

変数タグにパラメータを渡すのも易しい。

例)<$MTRepeatStr$> --- 与えられた文字列を繰り返す。
package MT::Plugin::RepeatStr;
use strict;
use MT::Template::Context;

MT::Template::Context->add_tag(RepeatStr=> \&repeat);

sub repeat {
	my($ctx, $arg)=@_;
	my $str = $arg->{str} x $arg->{kaisuu};
	$str;
}
1;

package MT::Plugin::RepeatStr;
関数などの名前が衝突しないように package を指定。

MT::Template::Context->add_tag(RepeatStr=>\&repeat);
RepeatStr というタグがあると repeat という メソッドを呼びだすことを指定。

my($ctx, $arg)=@_;
呼び出されるメソッドには2つの引数が渡される。一つ目はMT::Template::Contextオブジェクト。 2つ目はパラメータのハッシュへのリファランス。

my $str = $arg->{str} x $arg->{kaisuu};
テンプレートの変数タグ内で str='xyz' kaisuu='99' と記述した場合、 $arg->{str} に xxx, $arg->{kaisuu} に 99 が入る。
"xyz" x 99 で xyz を 99 回繰り返した文字列が得られる。

$str;
呼び出されるメソッドは最後に結果の文字列を返せば良い。

ここで作ったプラグインを RepeatStr.pl という名で保存し、plugins ディレクトリにアップロードしておこう。 これでテンプレート内で <$RepeatStr str='-' kaisuu='50' $> と記述すれば - を 50 回繰り返した文字列が得られる。

例)<$MTPerlEval$> --- perl のコードを実行する。
package MT::Plugin::Eval;
use strict;
use MT::Template::Context;

MT::Template::Context->add_tag(PerlEval=>\&perleval);

sub repeat {
	my($ctx, $arg)=@_;
	eval($arg->{eval});
}
1;
テンプレート内で <$MTPerlEval eval='12*12' $> と記述すると 144 が得られる。便利なようだが、どんな perl のコードでも実行してしまうので危険極まりないとも言える。(^^;

Posted by augustus at 2005年03月07日 21:21 | TrackBack
Comments
Post a comment









Remember personal info?