お知らせ

Movable Type プロフェッショナル・スタイル MT4.1対応 2008年4月8日

Movable Typeプロフェッショナル・スタイル」が発売されました。
Movable Typeの第一線に関わる人々の共著で、Movable Typeをビジネスサイト構築に活かすテクニックが満載です。
Movable Typeでサイト構築を行っているWeb制作会社等の方々にお勧めです。

他にも多数書籍を執筆しています。
こちらもぜひご覧ください。

Movable Type 4.15β4とメタデータの扱い

| コメント(0) | トラックバック(0)

Movable Type 4.15のβ4が公開されました。
米国時間の22日に公開されましたが、不具合があっていったん公開が取りやめられ、23日に修正版(β4b)が公開されました。

Movable Type 4.15βのページ

Movable Type 4.15β4では、「メタデータ」の扱い方が変化しています。

1.メタデータを独立したテーブルに保存

Change Logを見ると、こまごました不具合修正が多く行われています。
ただ、システム内部に一点大きな変更があります。

これまででは、ブログ記事等のオブジェクトにメタデータ(付随的なデータ)を保存する際には、テーブル内の「XXX_meta」というフィールドが使われていました。
4.15β4ではこの点が変更され、メタデータを保存するために独立したテーブルが使われるようになりました。
これによって、メタデータへのアクセスをより柔軟に行うことができるようになります。

2.プラグインでメタデータにアクセスする

プラグイン作者にとっては、「メタデータにどうやってアクセスするのか」という点に関心があるかと思います。

今のところ、MT::Metaクラス(MT_DIR/lib/MT/Meta.pm)のドキュメントがあります。
ただ、これは新規のクラスにメタデータ用テーブルを追加するときの話です。
既存のテーブルにメタデータのフィールドをどのように追加するのかは、今のところドキュメントがない模様です。

試してみたところ、以下のようにすることで、既存のテーブルにメタデータのフィールドを追加することができました。

2-1.レジストリにメタデータのフィールドの情報を追加

まず、レジストリの初期化(init_registry)の際に、以下のような書き方で、レジストリにメタデータのフィールドの情報を追加します。

sub init_registry {
    my $plugin = shift;
    $plugin->registry({
        object_types => {
            'クラス' => {
                'フィールド名' => 'データ型 meta',
                'フィールド名' => 'データ型 meta',
                ・・・
            },
            ・・・
        },
    });
}

例えば、ブログ記事(entry)に「meta_test」という文字列型(string)のフィールドを追加するには、以下のようにします。

sub init_registry {
    my $plugin = shift;
    $plugin->registry({
        object_types => {
            'entry' => {
                'meta_test' => 'string meta',
            },
            ・・・
        },
    });
}

また、プラグインの作成(new)の際に、以下のようにschema_versionを指定して、データベースのアップグレードの処理が行われるようにします。

my $plugin = __PACKAGE__->new({
    ・
    ・
    ・
    schema_version => 'x.xx',
});
MT->add_plugin($plugin);

2-2.メタデータへのアクセス

loadメソッドでオブジェクトを読み込むと、メタデータも同時に読み込まれ、オブジェクトのプロパティに自動的にマッピングされます。
これによって、メタデータのフィールドは、既存のフィールドと同じように、「オブジェクト->プロパティ」の形でアクセスすることができます。

例えば、前述の手順で、ブログ記事に「meta_test」というフィールドを追加したとします。
$entryがブログ記事をさしているとすると、そのブログ記事のmeta_testフィールドに「foo」という値を代入するには、以下のように書きます。

$entry->meta_test('foo');

また、meta_testフィールドの値を変数$meta_testに代入するには、以下のように書きます。

$meta_test = $entry->meta_test;

トラックバック(0件)

このブログ記事を参照しているブログ一覧: Movable Type 4.15β4とメタデータの扱い

このブログ記事に対するトラックバックURL: http://www.h-fj.com/mt/mt-tb.cgi/1283.

コメントする

管理者のみにコメントを送信したい場合は、「コメントを秘密にする」のチェックをオンにしてコメントを送信するか、メールフォームからメールをお送りください。

ブログ全体の感想など、この記事に直接に関係しないコメントは、ゲストブックにお気軽に投稿してください。


アーカイブ

ブログパーツ

ステータス