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属性などを基準には拾ってくることが出来ない見たいです。

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