タケユー・ウェブ日報

Ruby on Rails や Flutter といったWeb・モバイルアプリ技術を武器にお客様のビジネス立ち上げを支援する、タケユー・ウェブ株式会社の技術ブログです。

Movable Type で特定のMT::Objectサブクラスのコールバックを無理矢理仕込む

こんな感じで無理矢理フックを仕込むことができる。

callbacks:
    init_app: $yourplugin::YourPlugin::Plugin::cb_init_app

lib/YourPlugin/Plugin.pm

package YourPlugin::Plugin;
use strict;
use warnings;

# Registering callbacks
sub cb_init_app {
    my ( $cb, $app ) = @_;

    # MT::Assetおよびそのサブクラスに仕込む
    my $object_typs = MT->registry( 'object_types' );
    foreach my $class_type ( keys %$object_typs ) {
        my $class = MT->model( $class_type ) or next;
        if ( $class->isa('MT::Asset') ) {
            $class->add_trigger(
                post_save => sub {
                    my $asset = shift;
                    my ( $orig ) = @_;
                    # 保存前のやつ
                },
                post_save => sub {
                    my $asset = shift;
                    my ( $orig ) = @_;
                    # 保存後のやつ
                }
            );
        }
    }
    1;
}

1;