MTプラグインの作り方(1)
MTプラグインの作り方はいろいろな方がすでに説明されているが、
APIの使い方くらいしか見かけないので、別の方面から説明してみる。
とりあえず自分向けに分かったことをまとめることから。
1. MT::Appを継承してサブクラスを作る
package MT::App:TestModule; ←他とかぶらないようにパッケージ名
use strict;
use MT::App;
@MT::App::TestModule::ISA=qw(MT::App);
2. 初期化
これで、MT::Appサブクラスの初期化のほぼ最小構成に。
add_methods()を使用することで
URIに http://hoge~/hoge.cgi?__mode=XXXX とあった場合、
XXXXに対応するサブルーチンを呼ぶようになる。
以下の例だと、
http://hoge/mt-plugintest.cgi?__mode=view のとき、
sub view() が呼ばれるようになる。
$app->{default_mode}=’view’; で、
指定がなかったときのデフォルトで呼ばれるサブルーチンを指定。
デフォルト指定しないとエラーになるので必ず指定すること。
sub init{
my $app=shift;
my %param = @_;
$app->SUPER::init(%param) or return;
$app->add_methods('view'=>\&view);
$app->{default_mode}='view';
$app->{user_class}='MT::Author';
$app->{requires_login}=1;
$app->{mtscript_url}=$app->path . $app->{cfg}->AdminScript;
$app;
}
3. とりあえずサブルーチンを用意
$app->SUPER::load_tmpl() でHTMLのテンプレートをロードできる。
ロードできると HTML::Templateのオブジェクトを受けとれるので、
HTML::Templateのドキュメントを参照。
$app->{query}は CGIモジュールのオブジェクトを受けとれる。
以下のサンプルでは、MT自体のテンプレートファイルのheader.tmplを使って
ヘッダだけ表示しているところ。
sub view{
my $app=shift;
my $tmpl=$app->SUPER::load_tmpl("../tmpl/cms/header.tmpl");
my $q = $app->{query};
my $blog_id = $q->param('blog_id');
my $blog = MT::Blog->load($blog_id);
$app->add_breadcrumb("Main Menu",$app->{mtscript_url});
$tmpl->param(SCRIPT_URL=>$app->{mtscript_url});
$tmpl->param(AUTHOR_NAME=>$app->{author}->name);
$tmpl->param(AUTHOR_ID=>$app->{author}->id);
$app->l10n_filter($tmpl->output);
}
$app->l10n_filter()が、MT_TRANSのローカライズフィルタになってるそうだ。
こいつ使ってHTMLをアウトプットしないと、テンプレート中のMT_TRANS…が
そのままになってしまう。
4.実行
インスタンスを用意して run メソッドを呼ぶだけでOK
use testmodule;
my $app=MT::App::TestModule->new(Config=>"../mt.cfg",Directory=>"../")
or die MT::App::TestModule->errstr;
local $SIG{__WARN__} = sub { $app->trace($_[0]) };
$app->run;
と、まぁ、こんな感じで MT::App を継承してMTアプリが作成できる。
MT->new();…. から始めるやり方でもいいし、好きなように作ろう。