MTプラグインは、MTシステムにインストールするとシステム単位の有効/無効は指定できますが、ブログごとの有効/無効を指定することができません(2009/07現在)。
システムに実装されていない以上プラグインで実装するしかないわけです。
毎回同じようなコードを書くわけで、いいかげんテンプレート化できてきたので、ここで、紹介しておこうと思います。
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;
結局のところ、ブログごとのプラグイン設定で、有効/無効を指定させるってことになります。
で、実際のタグの処理や、フックの処理の部分で
みたいな感じで、有効になっていなければ抜けるみたいにするのが良いのかも。
もっとスマートな方法もありそうな気がするんですけど、割と自由にコントロールしやすいこの方法が今のところベストな気がしています。
コメント (6)
すみません。質問させてください。
return 1 unless $plugin->plugin_enable($blog_id);
の前はどのように記述すればよいのでしょうか。
Posted by: かまた | 2010年2月12日 19:32
>かまたさん
これは、フックのタイプなどによっても異なるのですが、フックした関数内で、現在のブログIDを取得してから、この条件文を使うことになると思います。たとえば、こんな感じで。
sub CMSPostDelete_entry {
my ($cb, $app, $entry) = @_;
my $blog_id = $entry->blog_id;
return 1 unless $plugin->plugin_enable($blog_id);
<中略>
}
Posted by: sekine | 2010年2月15日 10:38
>sekineさん
ご返信ありがとうございます。
asset_insertのタイミングで$blog_idを取得するにはどのようにすればよいでしょうか?
my ($eh, $app, $tmpl, $ctx) = @_;
$blog_id = $ctx->stash('blog_id');
このように記述しても $blog_id には
"dialog/asset_insert.tmpl"
としか入っていませんでした。
たびたびの質問申し訳ありません。
ご教授頂ければ幸いです。
よろしくお願いします。
Posted by: かまた | 2010年2月15日 14:03
>かまたさん
それであれば、
my ($eh, $app, $tmpl, $ctx) = @_;
my $q = $app->param;
my $blog_id = $q->param('blog_id');
こんな感じでしょうか?
この手のものを調べるときには、渡ってきた引数を一度ダンプして(Data::Dumperでシステムログにかきだしてみるとか)中身を見てみるとよいかもしれません。
Posted by: sekine | 2010年2月15日 14:18
>sekineさん
ご返信ありがとうございます。
$blog_idを取得することができました。
無事期待通りの動作をさせることができました。
大変助かりました!
ありがとうございます!
Posted by: かまた | 2010年2月15日 21:02
プラグインを記述を勉強しています。
こちらの記述には「チェックが入っていたら、入っていなかったら」という記述が見当たらないのですが、どこでそれを行っているのでしょうか。
「チェックが入っていたら、入っていなかったら」の記述はプラグインだと一般的にどういった書き方をするのか、ご教授いただけないでしょうか。
どうぞよろしくお願いします。
Posted by: mayona | 2010年11月24日 20:23