MT4Beta : Transformer プラグインを作ってみた速報

7月25日追記: この記事中のコードだと現在のバージョンでは動かないようです。コメントでご指摘いただきました。ありがとうございます。

MT4での新しいtransformerに挑戦してみました。
DOMライクなインターフェイスが提供され、管理画面の特定の位置にコードを挿入することが非常に容易になりました。

こんな感じのコードで動きます。

package MT::Plugin::TransformerSample;
use strict;
use base qw( MT::Plugin );
our $VERSION = '1.0';
 
my $plugin = MT::Plugin::TransformerSample->new({
    name => 'TransformerSample',
});
 
MT->add_plugin($plugin);
MT->add_callback('MT::App::CMS::template_param.edit_entry', 9, $plugin, \&param_transformer);
 
sub param_transformer {
    my ($eh, $app, $param, $tmpl) = @_;
    die 'something wrong...' unless UNIVERSAL::isa($tmpl, 'MT::Template');
 
    my $host_node = $tmpl->getElementById('useful-links')
        or die 'cannot get useful-links block';
 
    my $node = $tmpl->createElement( 'TEXT', '<em>hello <b>MT4</b> transformer?</em>' );
    $tmpl->insertBefore($host_node, $node)
        or die 'failed to insertBefore.';
}
 
1;

エントリーの投稿/編集画面の右側、クイックリンク(useful-links)の上にチラッとhelloworldするだけのプラグインですが、何かの参考になるでしょうか。

自前でMT::Template::Nodeのインスタンスを作成する必要がある辺りが、ちょっと癖があるなと感じました。
innerHTMLメソッドなどを使うと、MTタグのコンパイルまでやってくれるっぽいので、その辺を使いこなせればよいのかな。
あと、HTMLタグはMTのテンプレートの構文解析の対象にならないので、HTMLタグのid属性などを基準には拾ってくることが出来ない見たいです。

その他、気づいたことや、各メソッドの使い方など、後でまとめてみたいと思います。