MovableTypeプラグインの作り方 〜 第4回:その他の機能1

Posted by
ぴろり
Posted at
2006/04/02 14:46
Trackbacks
関連記事 (0)
Comments
コメント (2)
Post Comment
コメントできます
Category
MovableType カテゴリ
 何とか無事に折り返せました。連載4回目です。 今回は機能ではないものの、プログラム上重要なエラー処理について説明します。 プログラムの 80% はエラー処理だ、と言われるほど重要なものですが、 私の書くプログラムの 80% は遊び心で出来ています(謎)
 …それと今回は、の永続化データについても説明します。 これを使うことで毎に変数の値や設定内容を記憶しておくことができます。 揮発してしまう普通の変数とは異なり、データファイルのようにその値を永続的に保持できるという特徴があります。
この記事をはてなブックマークに追加する この記事のはてなブックマーク数 | この記事をlivedoorクリップに追加する この記事のlivedoorクリップ数 | この記事をYahooブックマークに追加する この記事のYahoo!ブックマーク数 | この記事をdel.icio.usに追加する

目次

 一度では全て書き切れないので、幾つかの連載記事とする予定です。 MovableType のヘルプドキュメント にある内容を網羅し、これに沿った形で書いていくつもりですので、併せて読み進めていただけるとモア・ベターかと思います。 よろしくお付き合いくださいませm(_ _)m

エラー処理

 MT のにおいて、エラー処理は頻繁にお世話になるものの一つでしょう。 具体的な例を挙げれば、 <$MTCalendarDay$> 変数タグが <MTCalendar> コンテナタグの外で使われた場合や、 タグの動作に必須のパラメータが指定されていなかったり、 パラメータに指定された値が範囲外であった場合など、 異常の発生をユーザに知らせるために重要な役割を果たします。
 エラー処理は、ユーザにミスを気付かせ、システムを正しく動作させるためには必須です。 しかし何でもエラーとするのではなく、のデフォルトの動作を上手く組み合わせたり、 パラメータを上限下限の範囲内に適切に修正して動作を行うようにするなど、 ここは開発者の腕の見せ所かも知れません。 あまりお節介過ぎるのも考え物ですが…(^^;

 次のは無条件でエラーを発生させる変数タグです(sample_4_1.pl)。 エラーの発生方法が異なるので、エラーメッセージの表示のされ方が異なります。

 これらの変数タグで発生させたエラーは、それぞれ下のように表示されます。 $ctx->error を使うことで、 発生したエラーの詳細や対処方法などをユーザに知らせることができるので、 通常はこちらを使うのが賢明です。
 一方、die によるエラーは、 一般のユーザにしてみれば不親切極まりないですが(笑)、 エラーが発生したファイル名と行番号をプリントしてくれるので、の開発中は有用でしょうか。

エラーの発生

特有のデータを保持する

 データを保持するのが変数の役割ですが、今までプログラム中で使用してきた変数は全て、 の動作が完了してしまうと、その内容が揮発してしまいます。 アクセスカウンタのように次々の加算されていく数字のような動作をで実現したい場合には、 MT::PluginData を使用して、データを永続化しておく必要があります。
 次のプログラムは、構築された回数をカウントする機能を持つ <MTBuildCount> 変数タグのサンプルです(sample_4_2.pl)。 現在までの構築回数を MT::PluginData を使用して永続化しています。

の詳細

my $build_count = load_plugindata ('BuildCount');
現在のの永続化データから、BuildCount と云う名前のデータを読み出し、 $build_count に代入します。
$build_count = 0 if (!defined $build_count);
指定された名前の永続化データが無い場合、$build_count を 0 で初期化します。
$build_count++;
save_plugindata ('BuildCount', $build_count);
$build_count を 1 だけ増し、 その値を BuildCount と云う名前で永続化データとして保存します。
use MT::PluginData;
MT::PluginData クラスの使用を宣言します。
sub load_plugindata
MT::PluginData を使用して、現在のの永続化データのうち、 第一引数($key) で指定された名前のデータを取得します。 指定されたデータが無い場合は undef を返します。 このサブルーチンは他にもそのまま流用できそうですね(^^)b
sub save_plugindata
MT::PluginData を使用して、 第二引数($data) で指定されたデータを、 第一引数($key) で指定された名前で永続化データとして保存します。 同じ名前の永続化データがある場合は、新しいデータで上書きされます。 このサブルーチンは他にもそのまま流用できそうですね(^^)b
my $plugindata = MT::PluginData->load ({ plugin => __PACKAGE__, key => $key })
 この(plugin)に割り当てられた、 key と云う名前のデータを読み込みます。 plugin を適当に設定することで、 自分以外の他ので使用されている永続化データを読み込むことも可能です。

 の永続化データは、毎に設定画面のあるものが、その設定内容を記憶しておき、 の動作時にその設定データを使用する場合などに使用されます。

サンプルファイルの

 この記事で使用したのプログラムダウンロードできます。

この記事を読んだ人はこんな記事も読んでいます ?

その他の関連する記事


関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

寄せられたコメント (全 2 件中、最新 5 件まで表示しています)

Posted by
ぴろり
at
2006/05/20 15:20
ID
/WKfLhV6

ここで紹介している save_plugindata のコードについて、
MT3.2では正しく動作しますが、MT3.1xでは参照の問題で正しく動作しません。
どうやら変数を参照で渡さないとダメみたいです…

参照渡しにしておけば、何れのバージョンでも動作します。
調査不足です。すみません。

Posted by
はみちゃ
at
2006/05/10 09:37
ID
bX1j9u2s

いままで見たどのプラグインの書き方コーナーよりもわかりやすいです。
次回はBigPAPIのようなので期待大!

もう待ちきれません。w

コメントを投稿する

 (必須/公開)
 (必須/非公開)
 

コメントスパム防止のため投稿前に ランダムな数字 ? を入力してから投稿してください。 お手数ですがご協力のほど宜しくお願いいたします。(必須)