以前、コメント保存時のコールバック「cms_post_save.comment」と「MT::Comment::post_save」の違いについて という記事を書いたのですが、実は、こんなややこしい分岐を行わなくても、コメントの保存が行われたのが MT 管理画面であるか、それともサイトのユーザによるコメント投稿であるかと判別することができます。
# 前の方は省略
sub init_registry {
my $plugin = shift;
$plugin->registry({
callbacks => {
'MT::Comment::post_save',
=> \&_cb_ps_comment,
},
}
sub _cb_ps_comment {
my ( $eh, $obj, $original ) = @_;
my $app = MT->instance;
if ( ref $app eq 'MT::App::Comments' ) {
# コメント投稿の場合
} else {
# MT 管理画面でコメントが保存された場合
}
}
$app の ref をとって、その結果を比較する形です。ref は、引数がオブジェクトの場合、そのパッケージ名を返します。コメント投稿の場合、ref $app の結果は MT::App::Comments になりますが、MT 管理画面でコメントが保存された場合、ref $app の結果は、「MT::App::CMS」になります。
MT::Bootstrap を使った CGI と連携するなど、制作するアプリケーションが複雑になると、ref は地味に分岐の役に立つでしょう。
なお、現在多忙につき絶賛更新滞り中ですが、12 月に入れば少しずつ復活するかもしれません。しないかもしれません。
Comments