« 目次

プラグインの開発について

Movable Typeでは、プラグイン・フレームワークによって、独自のMovable Typeタグを追加したり、機能を拡張することができます。このプラグインは、専用のディレクトリpluginsに格納されたPerlスクリプトです。Movable Typeが初期化されるとき、プラグインもすべてロードされ、Movable Typeの機能の一部として利用できます。.plの拡張子を持ったファイルだけが、プラグインと見なされ自動的にロードされます。

Movable Typeでは、SpamLookupプラグインをはじめとして、いくつかのプラグインが標準で提供されています。

変数タグ

変数タグとは、<$MTBlogURL$>のように、変数の値を埋め込むことができるタグです。変数タグの例は、以下のとおりです。

  1. 以下をload.plファイルとして保存します。
    use MT::Template::Context;
    MT::Template::Context->add_tag(ServerUptime => sub { `uptime` });
    1;
  2. load.plpluginsディレクトリにアップロードします。
  3. Movable Typeのテンプレートの1つに、以下を加えます。
    Uptime: <$MTServerUptime$>
  4. テンプレートを再構築したあと、値がウェブ・ブラウザーに表示されます。ディレクトリが正しく設定されていると、システムのuptimeコマンドからの出力が表示されます。

コンテナ・タグ

コンテナ・タグは、<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フィードの表示、サーバー状態の表示、ヒットカウンターの実装などいろいろあります。プラグインは、プラグイン・ディレクトリからダウンロードできます。


Copyright © 2001-2007 Six Apart, Ltd. All Rights Reserved.