Movable Typeでは、プラグイン・フレームワークによって、独自のMovable Typeタグを追加したり、機能を拡張することができます。このプラグインは、専用のディレクトリpluginsに格納されたPerlスクリプトです。Movable Typeが初期化されるとき、プラグインもすべてロードされ、Movable Typeの機能の一部として利用できます。.plの拡張子を持ったファイルだけが、プラグインと見なされ自動的にロードされます。
Movable Typeでは、SpamLookupプラグインをはじめとして、いくつかのプラグインが標準で提供されています。
変数タグとは、<$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フィードの表示、サーバー状態の表示、ヒットカウンターの実装などいろいろあります。プラグインは、プラグイン・ディレクトリからダウンロードできます。