アルファサード株式会社 代表取締役 野田 純生のブログ


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) をアップしました。

カテゴリ
タグ


このブログを書いている人
野田純生の写真
野田 純生 (のだ すみお)

大阪府出身。ウェブアクセシビリティエバンジェリスト。 アルファサード株式会社の代表取締役社長であり、現役のプログラマ。経営理念は「テクノロジーによって顧客とパートナーに寄り添い、ウェブを良くする」。 プロフィール詳細へ