Movable Type 4 のプラグイン作成での新機能

ボチボチとMT4の内部の構造が分かってきたです。
特に、プラグインはまったく新しい構造が導入されていて、色々と面白いことになっている模様。
プラグインはイコールComponentで、Registryなのです!(分かってない)

MT4は、内部的にRegistryと呼ばれる、様々な設定値をひとまとめにする構造を持っています。
例えば、テンプレートの編集画面に追加された「Insert...」という部分。デフォルトではMTEntriesの挿入が行える機能だけがついていますが、これはRegistryのキー「template_snippets」に「insert_entries」というエントリがひとつだけ入っていて、そのエントリが管理画面に表示されるという仕組みになっています。
そして、当然のごとくプラグイン側からRegistryのキーやエントリ(実際にはネストしたハッシュリファレンスです)を追加することが出来ます。書き方としてはこんな感じでしょうか

package MT::Plugin::CommentSnippet;
 
use strict;
use base qw( MT::Plugin );
 
my $plugin = new MT::Plugin::CommentSnippet({
    name => "CommentSnippet",
    version => '0.1',
});
MT->add_plugin($plugin);
 
sub init_registry {
    my $plugin = shift;
    $plugin->registry({
        'template_snippets' => {
            'comments' => {
                label   => 'comments',
                content => qq{<MTComments lastn="10"></MTComments>},
            },
        },
    });
}
1;

これだけでも、今までのコールバックを利用したりする方法に比べたら楽に感じます。
しかし、さらに簡単な書き方も出来ます。

template_snippets:
    trackbacks:
        label: tbpings
        content: <MTPings lastn="10"></MTPings>

はいyaml来ました。yaml。
pluginsディレクトリ内に適当なディレクトリを作成して、上記のyamlを「config.yaml」という名前で置くだけです。
これは楽です。

更新Pingサーバーのリストも同様に追加出来るのですが、その場合には追加分の項目の設定値の保存まで自動で面倒を見てくれるので、非常に楽です。素で驚きました。

perlのコンパイル済みのコードリファレンスが要求される機能も多いっぽいので、yamlを書くだけでどこまで複雑な機能の追加が実現できるかは分かりません。実際には、Perlで機能のコア部分を書いて、config.yamlでユーザーがプラグインの機能を拡張していく、その橋渡しとしてRegistryが機能するという形になるのでしょうか。
いずれにしても、非常に拡張性が高いシステムになっていると感じました。

追記: extrasディレクトリにそのままのサンプルがありましたね。今気がつきました;-)