印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
Plugin ダイナミックパブリッシングでプラグインの設定情報が取得できない

Movable Type のダイナミックパブリッシング対応プラグインを書いているとき,設定情報が取得できなくてハマッた。

■ ■ ■

昨日,拙作のプラグインをダイナミックパブリッシングに対応させてリリースしたのだが (nlog(n): 休日表示カレンダープラグイン 2.30),バグがなかなか取れずに悩みまくった。どこに嵌ったのかをメモしておく。

MTOS/MT4 のプラグインでは,ダイナミックパブリッシングのときでも,当然ではあるが,プラグインの設定を取得することができる。ブログ毎に行っている設定の取得は,細かいことを省いて要点だけを示せば,次のようになる。

function smarty_function_mtcalendarcolor($args, &$ctx) {
    $blog = $ctx->stash('blog');
    $blog_id = $blog['blog_id'];
    $blog_config[$blog_id] = $ctx->mt->db->fetch_plugin_data('JCalendarColor', "configuration:blog:$blog_id");
    $holidaycolor = $blog_config[$blog_id]['holidaycolor'];
    ...

これで,JCalendarColor のプラグイン設定画面で設定した holidaycolor の値が取得できるはず…だったのだが,これがなかなかうまくいかなかった。その原因は,スタティック用プラグインの Perl のソースにあった。これも要点だけ示す。

$VERSION = '2.30';
my $name = 'JCalendarColor';
my $plugin = MT::Plugin::JCalendarColor->new({
  name => "$name $VERSION",
  settings => new MT::PluginSettings([
    ['holidaycolor', {Default => '#FFCCFF'}],
    ...
  ])
});

PHP の fetch_plugin_data('JCalendarColor', ...); の呼び出しで使っている 'JCalendarColor' の名前は,Perl でプラグインを new する際の「name」を参照する。上の Perl のコードでは「"$name $VERSION"」となってしまっているので,「JCalendorColor」ではなく「JCalendarColor 2.30」という name になってしまっていたのだ。プラグインの設定画面では,プラグイン名の後ろにバージョンがついたものが表示されるので,見た目はまったく同じになる。それでなかなか見つけられなかったのだ。さらに,スタティックパブリッシングでは,この名前は関係なく取得できてしまうので,ますます見つからなかった。

MTOS では,name と version は分けて書く。次のようにすれば上手くいく。

$VERSION = '2.30';
my $name = 'JCalendarColor';
my $plugin = MT::Plugin::JCalendarColor->new({
  name => $name,
  version => $VERSION,
  settings => new MT::PluginSettings([
    ['holidaycolor', {Default => '#FFCCFF'}],
    ...
  ])
});

こんなコードを書いた,もともとの原因は,MT2 用プラグインをもとにバージョンアップしたことによる。MT2 では version を設定することができなかったため,name にバージョンを含めていたのである。

Posted by n at 2008-07-30 23:21 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?