ブログごとにプラグインの有効/無効を切り替える

  • 投稿日:
  • by
  • カテゴリ:

MTプラグインは、MTシステムにインストールするとシステム単位の有効/無効は指定できますが、ブログごとの有効/無効を指定することができません(2009/07現在)。
システムに実装されていない以上プラグインで実装するしかないわけです。
毎回同じようなコードを書くわけで、いいかげんテンプレート化できてきたので、ここで、紹介しておこうと思います。

package MT::Plugin::BlogEnable;

use strict;
use MT::Plugin;
use base qw( MT::Plugin );

use MT;
my $plugin = MT::Plugin::BlogEnable->new({
    id => 'blogenable',
    key => __PACKAGE__,
    name => 'BlogEnable',
    blog_config_template => \&blog_config_template,
    settings => new MT::PluginSettings([
        ['plugin_enable', { Default => 1, Scope => 'blog' }],
    ]),
});

MT->add_plugin($plugin);

sub blog_config_template {
    my $tmpl = <<'EOT';
<mtapp:setting
    id="plugin_enable"
    label="<__trans phrase="Enable:">">
    <p><input type="checkbox" value="1" name="plugin_enable" id="plugin_enable"<mt:if name="plugin_enable"> checked="checked"</mt:if> class="cb"/> <label for="plugin_enable">Plugin enable</label></p>
</mtapp:setting>
EOT
}

sub plugin_enable {
    my $plugin = shift;
    my ($blog_id) = @_;
    my %plugin_param;

    $plugin->load_config(\%plugin_param, 'blog:'.$blog_id);
    my $value = $plugin_param{plugin_enable};
    $value;
}

1;

結局のところ、ブログごとのプラグイン設定で、有効/無効を指定させるってことになります。
で、実際のタグの処理や、フックの処理の部分で

return 1 unless $plugin->plugin_enable($blog_id);

みたいな感じで、有効になっていなければ抜けるみたいにするのが良いのかも。
もっとスマートな方法もありそうな気がするんですけど、割と自由にコントロールしやすいこの方法が今のところベストな気がしています。