Movable Typeに独自オブジェクトを追加する方法
Movable Typeに独自オブジェクトを追加する方法を紹介します。
また追加したオブジェクトのデータをテンプレートタグで表示する方法もあわせて紹介します。
1.プラグインの構成
ここではサンプルとして、「Event」というプラグインを作り、Eventプラグインの中でイベント用データを保存するための「mt_event」というテーブルを定義します。
単純に独自テーブルを追加するのみで、独自テーブルの編集画面等は実装しません。
Eventプラグインのファイル構成は次のようになります。
plugins
└ Event
├ config.yaml
└ lib
└ MT
└ Event.pm
config.yamlはプラグインの定義ファイル、Event.pmはテーブルの定義を行うPerlモジュールになります。
2.定義ファイル
Eventラグインの定義ファイルconfig.yamlに次の内容を設定します。
id: Event
name: Event
version: 1.00
schema_version: 1.0
object_types:
event: MT::Event
それぞれの項目の意味は次のとおりです。
- name:プラグイン名を定義します
- id:プラグインIDを定義します
- version:プラグインのバージョンを定義します
- schema_version:独自テーブルのスキーマバージョンを定義します
- object_types:追加する独自オブジェクトをハッシュで定義します
独自オブジェクトをハッシュで定義する場合、
event: MT::Event
とします。
キーの「event」がタイプ名、「MT::Event」がデータベースのテーブルやフィールドなどを定義するクラスのパッケージ名になります。
スキーマバージョンはテーブル定義を変更した場合にインクリメントする必要があります。言い換えると、バージョンをインクリメントしないとテーブル定義の変更は反映されません。
3.テーブル定義
Eventプラグインに、config.yamlで定義した「MT::Event」に対応する「lib/MT/Event.pm」を追加します。
lib/MT/Event.pmには「mt_event」テーブルを定義し、フィールドに「title」と「description」という2つのフィールドを作成します。
package MT::Event;
use strict;
use base qw( MT::Object );
__PACKAGE__->install_properties({
column_defs => {
'id' => 'integer not null auto_increment',
'blog_id' => 'integer not null',
'title' => {
type => 'string',
size => 255,
},
'description' => {
type => 'text',
},
},
indexes => {
id => 1,
},
datasource => 'event',
primary_key => 'id',
});
1;
それぞれの項目の意味は次のとおりです。
- column_defs:各フィールドをハッシュで定義します
- indexes:インデックスにするフィールドをハッシュで指定します
- datasource:テーブル名を定義します。ここで設定した名称に接頭辞「mt_」を付与したものがテーブル名になります
- primary_key:プライマリキーを設定します
以下の実装を行うことでMT::Objectクラスを継承できます。
use base qw( MT::Object );
MT::Objectを継承することで、MT::Objectが提供するAPIを利用できます。つまりオブジェクトへのアクセスが(編集画面などを実装する際)簡単に行えるようになります。
継承した際のポイントをいくつか説明します。
- フィールド「id」は必須
- ブログ単位にデータを管理する場合、フィールド「blog_id」は必須
- インデックスへの「id」指定は推奨
- プライマリキー「id」は必須
4.プラグインをMTに追加する
作成したプラグインをMTのpluginsディレクトリに配置し、管理画面にアクセスすると次の画面が表示されるので、「アップグレード開始」をクリックします。
これでテーブルが追加されました。「Movable Typeに戻る」をクリックすればMT管理画面に移動します。
5.テーブルにデータを追加する
ここではとりあえずphpMyAdminを使って、作成したテーブルにレコードを追加してます。
phpMyAdminを開き、「mt_event」をクリック。
「SQL」タブをクリック。
次のSQLを実行します。
insert into mt_event(event_blog_id, event_title, event_description) values(2, 'foo', 'bar')
設定イメージ
これでレコードが追加されました。
6.テンプレートタグでテーブルの内容を出力する
たとえば、MTのデータベースでブログ記事用のテーブルは「mt_entry」です。カテゴリ用のテーブルは「mt_category」です。
これらのテーブルのデータはMTEntriesタグやMTCategoriesタグで出力することができますが、プラグインを使って新たに追加した独自テーブルには専用のテンプレートタグが用意されていません。
そのため、Eventテーブルの内容を出力するにはプラグインの中で拡張テンプレートタグを実装する必要がありますが、ここではより簡単な方法として「Objectプラグイン」で提供するMTObjectsタグおよびMTObjectタグを利用してみます。
追加したテーブルの各フィールドの内容をObjectプラグインを使って出力するには、次のように記述します。
<mt:Objects name="event">
<mt:Object name="event" property="title" />
<mt:Object name="event" property="description" />
</mt:Objects>
なお、Event.pmの中でMT::Objectを継承していないとObjectプラグインを使って出力することができないので注意してください。
- Movable Typeのプラグインで管理画面のローカライズを行う方法
- Movable Typeに追加した独自オブジェクトをダイナミックパブリッシングで出力する方法
- Movable Typeの一覧画面にリストアクションを追加する
- Movable TypeのプラグインオブジェクトをPerlで作成するときのバリエーション
- Movable Typeのプラグインファイル構成について