Movable Type Enterprise 1.5 マニュアル: プラグインの開発

目次

« 前へ | ホーム | 次へ »

プラグインの開発

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

プラグインの開発に関するトピックはこちらでもご覧になれます。

変数タグ

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

  1. 以下を「load.pl」ファイルとして保存します。
    use MT::Template::Context;
    MT::Template::Context->add_tag(ServerUptime => sub { `uptime` });
    1;
    
  2. 「load.pl」を「plugins」ディレクトリにアップロードします。
  3. Movable Type Enterpriseのテンプレートの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-2006 Six Apart, Ltd. All Rights Reserved.
« 前へ | ホーム | 次へ »