Movable Typeプラグイン開発入門
posted with amazlet at 09.04.08
関根 元和 シックスアパート
ラトルズ
売り上げランキング: 14216
ラトルズ
売り上げランキング: 14216
弊社関根が執筆しました「Movable Typeプラグイン開発入門」が発売されました。
本書は、より便利なプラグインを開発するテクニックを親切、ていねいに解説。 「こんなプラグインがあったらいいのに...」という開発者の願いを叶えます。 ちなみに、著者はMTプラグイン開発の第一人者・関根元和氏。 そして監修者は開発元のシックス・アパート社。 これ以上に望めない、最強の執筆陣による自信作です!
Movable Typeはプラグインによって、さまざまな拡張やカスタマイズが可能となります。このプラグインを自作することで、どんな高機能なツールよりも使いやすい自分だけのブログ・CMSツールを手に入れることができるかもしれません。
是非、ご覧ください。
コメント (6)
書籍買いました!
そこで質問なんですが94ページ〜のプラグイン設定について、設定の設置も出来ましたし、設定の保存もちゃんと出来てるようなんですが、99ページ〜に記載されてる設定値の取り出しがうまく行きません。
保存してある値ではなくデフォルトが取得されるようです。どうしたら良いんでしょう?この節に関してフルソースが掲載されてなくてどうして良いか分からず困ってます。
Posted by: hideyuki | 2009年5月 9日 18:29
>hideyukiさん
もし差し支えなければ、実際のコードを見せていただけませんか?
こちらに貼るのが大変であれば、メールしていただいても構いませんので。
Posted by: せきね | 2009年5月10日 09:45
お返事ありがとうございます。
全部を貼り付けると膨大になるのでかいつまんで貼り付けます。
my $plugin = MT::Plugin::WeatherWidget->new ( {
・・・・
## 設定項目
settings => new MT::PluginSettings([
['city_id', {Default => '113'}, Scope => 'blog'],
]),
## tag設定
registry => {
tags => {
function => {
'GetCity' => \&hdlr_get_city,
},
},
}
});
sub blog_config_template {
my $tmpl =
" size="5" />
EOT
}
sub get_setting {
my $plugin = shift;
my ($value, $blog_id) = @_;
my %plugin_params;
$plugin->load_config(\%plugin_params, 'blog:' . $blog_id);
my $val = $plugin_params{$value};
unless ($val) {
$plugin->load_config(\%plugin_params, 'system');
$val = $plugin_params{$value};
}
return $val;
}
sub hdlr_get_city {
## パラメータ受け取り
my ($ctx, $args, $blog_id) = @_;
## 地域IDを取得
my $city_id = $plugin->get_setting('city_id', $blog_id);
my $tmpl =
// var cityId = '${city_id}';
//]]>
EOT
$tmpl;
}
・・主要部分を抜粋するとこんな感じになります。
blog_config_template にてパラメータの保存と再度設定画面を開いた際の再保存は可能ですが、hdlr_get_cityにて取得したcity_idはデフォルトの113のままになってしまいます。
なお、書籍にあったコードでは
my $value = $plugin_params{$value};
ですが、これだとパラメータの$valueが書き換えられる気がしたので(Perl詳しくないものですみません)、$valに変数名を変更してます。
また、動作検証はMTOS-4.25で行ってます。
以上、宜しくお願いいたします。
Posted by: hideyuki | 2009年5月10日 16:02
hdlr_get_city を端折り過ぎました。
sub hdlr_get_city {
## パラメータ受け取り
my ($ctx, $args, $blog_id) = @_;
## スタティックPATHを取得
my $static_path = $ctx->_hdlr_static_path($args);
## 地域IDを取得
my $city_id = $plugin->get_setting('city_id', $blog_id);
my $tmpl =
// var cityId = '${city_id}';
//]]>
EOT
$tmpl;
}
こんな感じです。
MTではスタティックが基本のようなので、動的に部分的なコンテンツを生成するため、設定で保存した値を実行時にJavaScriptに渡してJavaScript側のAjaxでXMLを取得し、HTMLを生成してドキュメントを書き換えようとしているのですが、値を変更してても
var cityId = '${city_id}';
の箇所にデフォルトの113が入ってしまいます。
もちろん値を変更してから書き出しを行っても・・です。
Posted by: hideyuki | 2009年5月10日 16:16
>hideyukiさん
hdlr_get_cityの引数が間違っていると思います。
## パラメータ受け取り
my ($ctx, $args, $blog_id) = @_;
ではなくて、
## パラメータ受け取り
my ($ctx, $args) = @_;
ですね。
で、
my $blog_id = $ctx->stash('blog_id');
こうやって、blog_idを取得すればいいと思います。
Posted by: せきね | 2009年5月11日 10:40
お忙しいところご丁寧にありがとうございます!
>my ($ctx, $args) = @_;
>my $blog_id = $ctx->stash('blog_id');
なるほど・・。
Perlは不慣れでして引数がいまいち分かってなかったようです。
お手数をお掛け致しました。ありがとうございます。
Posted by: hideyuki | 2009年5月12日 01:49