元フリーエンジニアライフ

Ruby on Rails とか MovableType とかAWSやってるフリーランスウェブエンジニアの記録でした。現在は法人成りしてIT社長。

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;