Japanese plugin dev 1 2 - Hiranyaloka/Documentation GitHub Wiki
今回は、プラグイン開発の中心となるMovable Typeのレジストリについてと、プラグインやテーマのレジストリ設定に利用するYAML形式のファイルについて解説します。
レジストリとはMovable Typeの内部構造を階層的に保持するための仕組みです。階層的に設定を保持するという意味でMS Windowsのレジストリと似ています。
MT::Core ($MT_DIR/lib/MT/Core.pm)にある"$core_registry"をご覧ください。設定項目や初期値が細かく記述されていることが解ります。現時点で内容を把握する必要はありませんが、プラグイン開発の際に迷った場合など参照する事で解決策が見つかる場合もあります。
BEGIN {
$core_registry = {
version => MT->VERSION,
schema_version => MT->schema_version,
object_drivers => {
'mysql' => {
label => 'MySQL Database (Recommended)',
dbd_package => 'DBD::mysql',
config_package => 'DBI::mysql',
display =>
[ 'dbserver', 'dbname', 'dbuser', 'dbpass', 'dbport', 'dbsocket' ],
},
(中略)
applications => {
'xmlrpc' => { handler => 'MT::XMLRPCServer', },
'atom' => { handler => 'MT::AtomServer', },
'feeds' => { handler => 'MT::App::ActivityFeeds', },
'view' => { handler => 'MT::App::Viewer', },
'notify' => { handler => 'MT::App::NotifyList', },
'tb' => { handler => 'MT::App::Trackback', },
'upgrade' => { handler => 'MT::App::Upgrade', },
'wizard' => { handler => 'MT::App::Wizard', },
'comments' => {
handler => 'MT::App::Comments',
tags => sub { MT->app->load_core_tags },
},
'search' => {
handler => 'MT::App::Search::Legacy',
tags => sub { MT->app->load_core_tags },
},
他にもたくさんのレジストリ情報が記載されています。たとえば、メニューに関連するレジストリの初期値はMT::App::CMS ($MT_DIR/lib/MT/App/CMS.pm)に記載されています(“&core_menus”, “&core_compose_menus”)。
sub core_menus {
my $app = shift;
return {
'website' => {
label => "Websites",
order => 50,
},
'blog' => {
label => "Blogs",
order => 100,
},
'entry' => {
label => "Entries",
order => 200,
},
(略)
'tools:do_export_theme' => {
order => 10000,
mode => 'do_export_theme',
view => [ 'blog', 'website' ],
display => 0,
},
'tools:backup' => {
order => 10000,
mode => 'backup',
view => [ "blog", 'website', 'system' ],
display => 0,
},
};
}
sub core_compose_menus {
my $app = shift;
return {
compose_menus => {
label => 'Create New',
order => 100,
menus => {
'entry' => {
label => "Entry",
order => 100,
mode => 'view',
args => { _type => 'entry' },
permission => 'create_post',
view => "blog",
},
(略)
'blog:create' => {
label => "Blog",
order => 400,
mode => 'view',
args => { _type => 'blog' },
permit_action => 'use_blog:create_menu',
view => "website",
},
},
},
};
}
プラグインにより設定や表示を変更する場合、レジストリへ項目を上書きや追加します。これによりMovable Typeをカスタマイズすることができます。
YAMLは"YAML Ain’t a Markup Language"の略で、HTMLのようなマークアップ言語ではありません。テキストで書かれデータ構造を記載するのに適した記法になっています。同じような理由でつかわれる言語としてXMLがありますが、YAMLの記載がシンプルであることより、設定やAPIからのデータ転送などにもYAMLが利用することが増えてきています。
XML <xml version="1.0"> <address> <first_name>Taro</first_name> <last_name>YAMADA</last_name> <email>[email protected]</email> <company> <name>Six Apart Ltd.</name> <street_address> 5-2-39 Akasaka, Entsuji-Gadelius Bldg. 7F, Minato-ku, Tokyo, 107-0052, Japan </street_address> </company> </address>
YAML
address:
first_name: Taro
last_name: YAMADA
email: [email protected]
company:
name: Six Apart Ltd.
street_address: >
5-2-39 Akasaka, Entsuji-Gadelius Bldg. 7F,
Minato-ku, Tokyo, 107-0052, Japan
Movable Typeのプラグイン開発やテーマ作成でもYAMLは活用されています(config.yaml, theme.yaml, etc.)
id: MyPlugin01 name: Sample plugin registration version: 1.0 description: Sample plugin registration author_name: Plugin author author_link: http://www.example.com/about/ doc_link: http://www.example.com/docs/
YAMLの記述方法はとてもシンプルです。インデントをきっちりそろえる必要があるのが注意点です。
インデント(スペース2個、もしくは4個が多い。TABは利用できません)
parent:
child:
grandchild: hoge
インデント 悪い例(childとfooが、grandchildとbarが同じインデントなっていない。
同じ階層なものはインデントを明示的に合わせる必要があります。)
parent:
child:
grandchild: hoge
foo:
bar: foobar
配列 - foo - bar
ハッシュ child01: foo child02: bar
改行を保持したままの記述(設定内容 2行)
description: |
StyleCatcher lets you easily browse through styles and
then apply them to your blog in just a few clicks.
=>
StyleCatcher lets you easily browse through styles and
then apply them to your blog in just a few clicks.
改行を保持しない記述(設定内容 1行、改行をスペース一文字に置き換え)
description: >
StyleCatcher lets you easily browse through styles and
then apply them to your blog in just a few clicks.
=>
StyleCatcher lets you easily browse through styles and then apply them to your blog in just a few clicks.
今回はプラグイン開発に必須なレジストリの概念と、YAMLの利用方法について解説しました。
レジストリについてはハードルが高いと思いますが、プラグイン開発を進めると徐々に解ってきますので次のステップに進みましょう。
- プラグイン開発のためのファーストステップ
- レジストリ、YAMLについて
- 環境変数について
- プラグインのローカライゼーションについて
- テストドリブンでのプラグインの開発について
- グローバル・モディファイアプラグインの開発について
- ファンクションタグ プラグインの開発について
- ブロックタグ プラグインの開発について
- コンディショナルタグ プラグインの開発について
- プラグインのデバッグ
- プラグインの設定方法
- コールバックとフックポイント
- スケジュールタスクの開発
- MTオブジェクトの利用方法
- 独自オブジェクトの作成
- 新規アプリケーションの作成
- Transformerプラグインの開発
- 管理画面のメニュー修正
- リストアクションの追加
- 動作モードの追加とモーダルウィンドウの表示
- 外部Web APIとの連携
- 権限とロール