MT::Objectのサブクラスの作成は実は簡単。
公開日 : 2007-07-04 11:58:17
これがどうにも理解できなかったんですよね(俺だけ?)。
小粋空間さんのところで紹介されていたプラグインのソースを眺めていて...あぁやっと分かった。PHPでインストーラとか用意したりしなくて良かったんですよね。
実はちゃんとオブジェクト・リファレンスには書いてあるわけですが (みんなこれで理解してたんだ...すげぇ) ってかやってみたら簡単やった...ってのが多いな、最近。
- schema_version
プラグインでいくつかのオブジェクト・クラスを宣言している場合、これらのクラスのインストールまたはアップグレードが必要かどうかを判断するためにschema_versionを用います。Movable Typeでは、プラグインのschema_versionをMT::Configテーブルに保存し、参照できるようになっています。
- object_classes
MTのアップグレード処理で保持すべきMT::Objectの派生クラスのリストを宣言します。
object_classes => [ 'MyPlugin::Foo', 'MyPlugin::Bar' ]
当該オブジェクト・パッケージのスキーマも保持するため、schema_versionも併用してください。
つまり, インストール(データベースのアップグレード)について特にコードを書く必要は無いんだな。Permalink.pm を用意して,
package MT::Permalink;
use strict;
@MT::Permalink::ISA = qw( MT::Object );
__PACKAGE__->install_properties({
column_defs => {
'id' => 'integer not null',
'blog_id' => 'integer not null',
'permalink' => 'string(255)',
'modified_on' => 'timestamp',
},
indexes => {
blog_id => 1,
permalink => 1,
modified_on => 1,
},
child_of => 'MT::Blog',
datasource => 'permalink',
primary_key => 'id',
});
1;
プラグインの中で schema_version と object_classes を加えてやる。
use vars qw( $VERSION $SCHEMA_VERSION );
$SCHEMA_VERSION = '0.50';
@MT::Plugin::RebuildAt1stView::ISA = qw(MT::Plugin);
my $plugin = new MT::Plugin::RebuildAt1stView({
name => 'RebuildAt1stView',
(中略)
'schema_version' => $SCHEMA_VERSION,
object_classes => [
'MT::Permalink',
],
});
プラグインをアップロードしてログインしようとすると...
ということで, 導入がより簡単になった RebuildAt1stView(Beta) をアップしました。