Movable Typeに独自オブジェクトを追加する方法

Movable Typeに独自オブジェクトを追加する方法

Posted at October 24,2013 12:55 AM
Tag:[Developer, MovableType, Plugin]

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プラグインを使って出力することができないので注意してください。

関連記事
zenback
人気エントリー
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)