« 当サイトで公開しているMTプラグイン等のMT4.25対応状況 | メイン | MovableType用RenameLabel Plugin Ver.1.12 »

書籍「Movable Typeプラグイン開発入門」が発売になりました

Movable Typeプラグイン開発入門
関根 元和 シックスアパート
ラトルズ
売り上げランキング: 14216

弊社関根が執筆しました「Movable Typeプラグイン開発入門」が発売されました。

本書は、より便利なプラグインを開発するテクニックを親切、ていねいに解説。 「こんなプラグインがあったらいいのに...」という開発者の願いを叶えます。 ちなみに、著者はMTプラグイン開発の第一人者・関根元和氏。 そして監修者は開発元のシックス・アパート社。 これ以上に望めない、最強の執筆陣による自信作です!

Movable Typeはプラグインによって、さまざまな拡張やカスタマイズが可能となります。このプラグインを自作することで、どんな高機能なツールよりも使いやすい自分だけのブログ・CMSツールを手に入れることができるかもしれません。
是非、ご覧ください。

お問い合わせ

エムロジック株式会社ではMovable Typeによるサイト構築やプラグイン開発、iPhone・Windows等のアプリケーション開発業務を行っています。
お問い合わせはこちらまで。

コメント (6)

hideyuki:

書籍買いました!
そこで質問なんですが94ページ〜のプラグイン設定について、設定の設置も出来ましたし、設定の保存もちゃんと出来てるようなんですが、99ページ〜に記載されてる設定値の取り出しがうまく行きません。
保存してある値ではなくデフォルトが取得されるようです。どうしたら良いんでしょう?この節に関してフルソースが掲載されてなくてどうして良いか分からず困ってます。

せきね:

>hideyukiさん
もし差し支えなければ、実際のコードを見せていただけませんか?
こちらに貼るのが大変であれば、メールしていただいても構いませんので。

hideyuki:

お返事ありがとうございます。
全部を貼り付けると膨大になるのでかいつまんで貼り付けます。

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で行ってます。

以上、宜しくお願いいたします。

hideyuki:

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が入ってしまいます。
もちろん値を変更してから書き出しを行っても・・です。

せきね:

>hideyukiさん
hdlr_get_cityの引数が間違っていると思います。

## パラメータ受け取り
my ($ctx, $args, $blog_id) = @_;

ではなくて、

## パラメータ受け取り
my ($ctx, $args) = @_;

ですね。

で、

my $blog_id = $ctx->stash('blog_id');

こうやって、blog_idを取得すればいいと思います。

hideyuki:

お忙しいところご丁寧にありがとうございます!

>my ($ctx, $args) = @_;
>my $blog_id = $ctx->stash('blog_id');

なるほど・・。
Perlは不慣れでして引数がいまいち分かってなかったようです。
お手数をお掛け致しました。ありがとうございます。

コメントを投稿