Movable TypeのカスタムフィールドをPluginで設定

 Movable Typeでカスタムフィールドを作りたいと思う時、なんだかんだでごく頻繁に使用するのがブログ記事をあげる際のカスタムフィールドです。MTでは非常に様々なカスタムフィールドを作成することができますが、ここでは主にブログ記事に関してのカスタムフィールドをプラグインでもって自動的に設定してしまおうという解説をしています。

プラグインをアップロードする

 まずは面倒なのでSample Downloadして設定してみてください。
 プラグインはシステムスコープとなっていますので./mt/plugin/辺りにアップロードしてみてください。各ブログのプラグインディレクトリにアップロードしてもたぶん動きません。設定が終わったら、プラグインがきちんと読み込まれて機能しているか確認してください。

[システム]→[ツール]→[プラグイン]
system_plugin_list.jpg
 [システム]→[カスタムフィールド]→[一覧]
custamfield_list.jpg各ブログの新規作成画面
blogedit.jpg  これらが読み込まれていれば成功です。もし適切にプラグインが読み込まれていなかったりカスタムフィールドが表示されていない場合はプラグインファイルのパーミッション[644]やアップロードしたディレクトリが正しいか確かめてみてください。

プラグインの中身

 プラグインの中身を説明しますが、プラグインそれ自体の構成についてはPlugin開発基礎をご覧ください。
 カスタムフィールドを設定するプラグインはそれほど面倒な設定はありませんので順を追って説明します。
package MT::Plugin::CustomFieldAddTest;
ここでプラグインのパッケージ名を宣言しています。ここではCustomFieldAddTestというパッケージ名になります。プラグインの設定では、必ずpackage MT::Plugin::<パッケージ名>;という風になります。
use strict;
use MT;
use MT::Blog;
use vars qw(
    $plugin_name
    $version
    $ad_field_1
);
各モジュールの設定と読み込み、使用する変数の宣言をしています。複数のカスタムフィールドを設定する場合は、$ad_field_1に続けて$ad_field_2...と付け加えてゆきます。
#------------------
# プラグインの表示名
#------------------
$plugin_name = 'Custom Field Add Test';
$version = '1.0';
プラグインの名称とバージョンを記入します。プラグイン名はパッケージ名(クラス)やプラグイン自体のファイル名と特に関係がなくMTのシステム内で表示される名称となります。ですので半角スペースなどを挿入しても大丈夫です。バージョン名も同様でいきなり100.0でも大丈夫です。
$ad_field_1 = 'entry_test_field';
先ほど設定したカスタムフィールドの変数 $ad_field_1にベースネームを設定します。ダッシュボードからカスタムフィールド作成時にもベースネームの指定をしますのでその要領で行います。要するにこのフィールドをアイデンディファイするためのベースネームなので他のフィールドと重複しないように気をつけます。
use base qw( MT::Plugin );
@MT::Plugin::CustomFieldAddTest::ISA = qw( MT::Plugin );
baseモジュールの使用宣言とプラグインオブジェクトの生成みたいなことをやっています。CustomFieldAddTestの部分は最初に設定したパッケージ名が入ります。違う文字を入れたら動かなくなりますのでご注意。
my $plugin = __PACKAGE__->new({
    name    => $plugin_name,
    version => $version,
    author_name => 'omnioo lab.',
    author_link => 'http://www.omnioo.com/omnioolab/',
    description => '削除不可能なカスタムフィールドを自動的に作成します。'
});
プラグインの様々な設定をしています。$plugin_nameと$versionがすでに設定してあるので特にその他は設定しなくてもよいのですが、著作に関する部分と製作者のHP、説明に関する部分を加えておくとよいです。
MT->add_plugin( $plugin );
プラグインを使えるようにするおまじないです。ここまででプラグインとしての大まかな手続きが完了しました。次はプラグイン機能の実際の中身を作ります。
# レジストリに登録
sub init_registry {
    my $plugin = shift;
    $plugin->registry({
        init_app => \&add_field_set,
    });
}
設定したカスタムフィールドの情報をMTのレジストリに登録します。Perlはどうしてだかサブルーチンを後に書く傾向にあるので後から出てきますが、add_field_setという名のサブルーチンでもって追加したカスタムフィードの情報を登録しています。次の行がそれです。
sub add_field_set {
...
}
ここでどんなカスタムフィールドを追加するのかを設定しています。add_field_setの中身なのですが、不親切に一気に書いてしまいます。
my ($custom);
$custom = CustomFields::Field->load({ basename => $ad_field_1 } );
    unless($custom){
        $custom = CustomFields::Field->new;
        $custom->blog_id(0);                        # 0でシステムスコープ、ブログIDの指定でブログスコープ(プラグインの影響範囲)
        $custom->name('テストカスタムフィールド');    # カスタムフィールド名
        $custom->basename($ad_field_1);            # base_name
        $custom->obj_type('entry');                # オブジェクトタイプ
        $custom->type('text');                        # データの型
        $custom->tag('entrytestfield');            # MTのタグ名 (MTは省く)
        $custom->required(0);                        # 必須項目(必須項目の場合は1)
        $custom->description('テストのためのカスタムフィールド');            # 項目の説明
        $custom->options('');                        # オプションが必要な場合。type が、datetime,select,radioの場合
        $custom->save;
    }
$customという変数を使ってオブジェクトを処理してゆきます。この設定は見ての通りダッシュボードから設定する場面とまったく同じ内容になっていると思います。
カスタムフィールド名:
 日本語OK。設定したいカスタムフィールドの名称を設定します。
オブジェクトのタイプ:
 entry(ブログ記事)、page(ウェブページ)、category(カテゴリ)、folder(フォルダ)、author(ユーザー)などのオブジェクトタイプがありますが、ここではentryを設定。
データ型:
 text(テキスト)、textarea(テキスト(複数行))、checkbox(チェックボックス)、url(URL)、datetime(日付と時刻)、オプション(field_optionsの値が必要 (datetime or date or time))、select(ドロップダウン オプションでfield_optionsの値が必要(値をカンマ区切りで入力))、radio(ラジオボタン オプションでfield_optionsの値が必要(値をカンマ区切りで入力))、asset(アイテム (ブログIDを指定する場合のみ))、asset.audio(オーディオ(ブログIDを指定する場合のみ))、asset.video(ビデオ(ブログIDを指定する場合のみ))、asset.image(画像(ブログIDを指定する場合のみ))を設定できます。
MTタグ名:
 実際にMTタグとして使用する際の名称です。タグでは<mt:(設定したタグ名)>となります。つまりここでは、<mt:entrytestfield>となります。
必須項目:
 記事を書く際に必須項目にするかどうかを設定します。必須項目の場合は1を設定。
カスタムフィールドの説明:
 カスタムフィールド名では不明瞭な部分を説明書きとして保存できます。
オプション:
 データ型の設定で例えば「プルダウン」のメニューなどではどんな項目をプルダウンさせるのかを設定しないと意味がありません。データ型によって設定は若干違いますが、たいていはカンマ切りで複数の要素を設定するような感じです。ここではデータ型をテキストにしているので必要ないので空にしておきます。
保存:
 当然保存します。このデータはデータベースに直接保存されます。ですからダッシュボードから削除が不可能になります。このカスタムフィールドを削除する際には、このプラグインを削除してからダッシュボードのプラグインの一覧から削除して
ください。プラグインがある限りダッシュボード上から削除してもまた出現します。
1;
__END__
 最後に返り値1を返して、礼儀として__END__です。

注意事項

 Movable Typeはとにかく複雑なソースでできておりまして、どこでどんな変数を使っているのかわからんのです。そんなわけで、ここで使用するbasenameやtag名に関しては重複を避けるためにできるだけ複雑にした方がいいです。開発中にlinkURLというbasenameを使ったら動作がちょっとおかしくなりました。なんかきちんと書いてあるのに動作が何だか不安定という場合には変数とかネームの重複を疑ってみるといいです。








プロフィール



  • Name :: 山上オサム ♂(37)
  • Hobby :: 武術
  • Work :: Web Designer