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