Movable Type Enterpriseでは、プラグイン・フレームワークによって、独自のMovable Type Enterpriseタグを追加したり、機能を拡張することができます。このプラグインは、専用のディレクトリ「plugins」に格納されたPerlスクリプトです。Movable Type Enterpriseが初期化されるとき、プラグインもすべてロードされ、Movable Type Enterpriseの機能の一部として利用できます。「.pl」の拡張子を持ったファイルだけが、プラグインと見なされ自動的にロードされます。
プラグインの開発に関するトピックはこちらでもご覧になれます。
変数タグとは、<$MTBlogURL$>のように、変数の値を埋め込むことができるタグです。変数タグの例は、以下のとおりです。
use MT::Template::Context; MT::Template::Context->add_tag(ServerUptime => sub { `uptime` }); 1;
Uptime: <$MTServerUptime$>
コンテナ・タグは、<MTEntries>~</MTEntries>のように、ある条件によりエントリーやコメント等を一覧化することができます。コンテナ・タグの例は、以下のとおりです。
MT::Template::Context->add_container_tag(Loop => sub { my $ctx = shift; my $res = ''; my $builder = $ctx->stash('builder'); my $tokens = $ctx->stash('tokens'); for my $i(1..5){ $ctx->stash('i_value', $i); defined(my $out = $builder->build($ctx, $tokens)) or return $ctx->error($ctx->errstr); $res .= $out; } $res; });
MT::Template::Context->add_tag(LoopIValue => sub { my $ctx = shift; $ctx->stash('i_value'); });
これは以下のようにテンプレートで使うことができます。
<MTLoop> The value of I is: <$MTLoopIValue$> </MTLoop>
すると、以下のように表示されます。
The value of I is: 1 The value of I is: 2 The value of I is: 3 The value of I is: 4 The value of I is: 5
条件タグは実際にはコンテナ・タグの1つですが、条件タグを書く作業を簡単にするため、「add_conditional_tag」メソッドを使うことができます。このメソッドは2つの引数を取ります。それは、タグ名と、条件が合致するかどうかで真か偽の値を返すサブルーチンへのリファレンスです。例えば、以下のコードは次の3つの条件タグを追加します。
- <MTIfYes>: 常にコンテンツを表示する
- <MTIfNo>: コンテンツをまったく表示しない
- <MTEntryIfTitle>: エントリーのコンテキストに使われ、エントリーにタイトルがある場合にだけコンテンツを表示する
use MT::Template::Context; MT::Template::Context->add_conditional_tag(IfYes => sub { 1 }); MT::Template::Context->add_conditional_tag(IfNo => sub { 0 }); MT::Template::Context->add_conditional_tag(EntryIfTitle => sub { my $e = $_[0]->stash('entry')or return; defined($e->title)&& $e->title ne ''; });
これらのタグを使った一例です。
<MTIfYes>Yes, this appears.</MTIfYes> <MTIfNo>No, this doesn't appear.</MTIfNo> <MTEntries> <MTEntryIfTitle> This entry has a title: <$MTEntryTitle$> </MTEntryIfTitle> </MTEntries>
「add_global_filter」メソッドを使うと、「グローバル・タグ・アトリビュート」(属性)を加えることができます。
例:グローバル・フィルターMT::Template::Context->add_global_filter(rot13 => sub { (my $s = shift)=~ tr/a-zA-Z/n-za-mN-ZA-M/; $s; });
これは以下のように使えます。
<$MTEntryTitle rot13="1"$>
匿名のサブルーチンには3つの引数(フィルターされるタグのスカラー値(数値または文字列)、アトリビュートに供給される引数の値、および「MT::Template::Context」オブジェクト)が渡されます。2番目の引数の例として、「foo」というフィルターを作ったと仮定し、以下のように呼び出すと、
<$MTCommentAuthor foo="5"$>
コールバック・ルーチンの2番目の引数は、「5」になります。
プラグインのタグを記述する目的は、RSSフィードの表示、サーバー状態の表示、ヒットカウンターの実装などいろいろあります。プラグインは、プラグイン・ディレクトリからダウンロードできます。