BIGPAPI/Transformer両対応プラグインの作成

先日、Transformerプラグインの作成方法を紹介しましたが、当面の状況を考慮すると、BIGPAPIとTransformerの両対応にしておくとより良いと思われます。

Movable Type 3.3でのBIGPAPIとTransformerとの関係

Movable Type 3.3にも、BIGPAPIおよびBIGPAPI対応プラグインをインストールすることができ、動作もします。
ただし、BIGPAPIとTransformerは、いずれもテンプレートを読み込む処理を一部書き換えるものですので、共存することができません。
つまり、BIGPAPIをインストールしてオンにすると、Transformerにしか対応していないプラグインが動作しなくなります。

BIGPAPI/Transformerを両対応にしておく

今後はTransformer対応プラグインが増えていくと思いますが、当面はBIGPAPI対応プラグインの方が多いです。
そのため、MT3.3でもBIGPAPIを使いたいという方が多いと思われます。
そこで、管理画面を書き換えるプラグインを作る際には、当面はTransformerとBIGPAPIの両方に対応しておく方が良いでしょう。

テンプレート書き換えのサブルーチンをadd_callbackする際に、BIGPAPIとTransformerの両方を登録しておけば、BIGPAPIがオンならBIGPAPIで、そうでなければTransformerで動作するようになりました。

事例

先日ご紹介したプラグインの例を、BIGPAPIとTransformerの両方に対応させると、以下のリストのようになります。

package MT::Plugin::TransformerTest;
use strict;

use base qw( MT::Plugin );

require MT::Plugin;
require MT;
require MT::Log;

# register plugin
my $plugin = MT::Plugin::TransformerTest->new({
    'name' => 'TransformerTest',
    'author_name' => 'H.Fujimoto',
    'author_link' => 'http://www.h-fj.com/blog/',
    'description' => 'Transformer plugin test.',
    'version' => '1.01',
});
MT->add_plugin($plugin);

# register callback
MT->add_callback('bigpapi::template::menu', 9, $plugin, \&edit_menu_template_bigpapi);
MT->add_callback('MT::App::CMS::AppTemplateSource.menu', 9, $plugin, \&edit_menu_template_transformer);

sub edit_menu_template_bigpapi {
    my $log = MT::Log->new;
    $log->message("TransformerTest : register by BIGPAPI");
    $log->save;
    &edit_menu_template(@_);
}

sub edit_menu_template_transformer {
    my $log = MT::Log->new;
    $log->message("TransformerTest : register by Transformer");
    $log->save;
    &edit_menu_template(@_);
}

sub edit_menu_template {
    my ($cb, $app, $template) = @_;

    my $blog_id = $app->{query}->param('blog_id');
    my $entry_count = MT::Entry->count({ blog_id => $blog_id });

    my $old = <<HERE;
<p class="page-desc"><MT_TRANS phrase="Here is an overview of [_1]." params="<TMPL_VAR NAME=BLOG_NAME ESCAPE=HTML>"></p>
HERE
    $old = quotemeta($old);
    my $new = <<HERE;
<p class="page-desc"><MT_TRANS phrase="Here is an overview of [_1]." params="<TMPL_VAR NAME=BLOG_NAME ESCAPE=HTML>"></p>
<p class="page-desc">Number of entries : $entry_count</p>
HERE
    $$template =~ s/$old/$new/;
}

1;

このプラグインをMTの「plugins」ディレクトリにアップロードしてインストールし、MTにログインすると、BIGPAPIのオン/オフに関わらず、プラグインが動作します。
また、BIGPAPIがオンならログに「TransformerTest : register by BIGPAPI」と記録されます。
一方、BIGPAPIがオフ(またはインストールされていない)なら、ログに「TransformerTest : register by Transformer」と記録されます。