BLOG

Go to top


続・コメント保存時のコールバック「cms_post_save.comment」と「MT::Comment::post_save」の違いについて

November 18, 2008 12:36 PM

以前、コメント保存時のコールバック「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


Contact me

Copyright © 2005 - 2017 okayama All rights reserved.