« Movable Type プラグイン作成入門(4) | メイン | mimeTeX (WEB上での数式の表示) »
2005年03月13日
Movable Type プラグイン作成入門(5)
今度は独自のコンテナタグの作り方を見てみよう。例)
package MT::Plugin::CsvLoop; use strict; use MT::Template::Context; MT::Template::Context->add_container_tag( CsvLoop=>\&CsvLoop); sub CsvLoop{ my($ctx,$arg) = @_; my(@list)=split(/,/, $arg->{list}); my $res = ''; my $builder = $ctx->stash('builder'); my $tokens = $ctx->stash('tokens'); for my $i (@list) { $ctx->stash('csv_value', $i); defined(my $out=$builder->build($ctx,$tokens)) or return $ctx->error($ctx->errstr); $res .= $out; } $res; } MT::Template::Context->add_tag( CsvLoopValue=>\&CsvLoopValue ); sub CsvLoopValue{ my $ctx = shift; $ctx->stash('csv_value'); }package MT::Plugin::CsvLoop;
関数などの名前が衝突しないように package を指定。
MT::Template::Context->add_container_tag(
CsvLoop=>\&CsvLoop);
MTCsvLoop というコンテナタグがあると CsvLoop という メソッドを呼びだすことを指定。
my($ctx, $arg)=@_;
呼び出されるメソッドには2つの引数が渡される。一つ目はMT::Template::Contextオブジェクト。 2つ目はパラメータのハッシュへのリファランス。
my(@list)=split(/,/, $arg->{list});
テンプレートのコンテナタグ内で list='~' と記述した場合、 $arg->{list} に ~ が入る。
これを "," で区切ったものを @list に代入。
あとは、MT::Template::Contextオブジェクトの内容をまだ理解していないので説明できない。悪しからず。(^^;)
ここで作ったプラグインを CsvLoop.pl という名で保存し、plugins ディレクトリにアップロードしておこう。 これでテンプレート内で コンテナタグの利用は以下のような感じでやれば良い。
<MTCsvLoop list='claudius,nero,galba,otho'> <$MTCsvLoopValue$>: <a href="<$MTCsvLoopValue$>.html"> <$MTCsvLoopValue$>.html </a> <br/> </MTCsvLoop>テンプレートの中に固定のループを書いてもあまり役に立たないような気もするが、まあ、サンプルということで。(^^;
投稿者 augustus : 2005年03月13日 08:38
トラックバック
このエントリーのトラックバックURL:
http://www.augustus.to/cgi-bin/blog/mt-tb.cgi/72