Movable Type 4 で、コメント保存の際に動作するプラグインを作成する場合の簡単なメモ。
コメントを保存する際にもコールバックが走るのですが、ここではアプリケーション本体が送られてこない様子。そういうときは、自前で MT のインスタンスを作成すればよい。
sub init_registry {
my $plugin = shift;
$plugin->registry({
callbacks => {
'MT::Comment::post_save'
=> \&_set_instance,
},
});
}
sub _set_instance {
my ($cb, $obj, $original) = @_;
my $app = MT->instance(); # インスタンス作成
# ここに処理内容を記述
}
どういう時に使えるかというと、コメントフォームに新しい入力フィールドを作成し、その値を受け取りたいとき。以下のようにすれば受け取れます。
sub init_registry {
my $plugin = shift;
$plugin->registry({
callbacks => {
'MT::Comment::post_save'
=> \&_set_instance,
},
});
}
sub _set_instance {
my ($cb, $obj, $original) = @_;
my $app = MT->instance(); # インスタンス作成
my $q = $app->param;
my $newfield1 = $q->param('newfield1');
# ここに処理内容を記述
}
これで、コメントフォーム内の name 属性が newfield1 のフィールドの内容が $newfield1 に格納されます。
あと、これはちゃんと確認したわけではないのですが、 init_registry においては MT::Comment::post_save と記述しないとなぜか動きませんでした。
Comments