以前の記事で、変形コールバック(Transformation Callbacks)の記事(翻訳)を書いた。 SixApart本家の開発者向けドキュメントの一部だ。
この記事をもとに、この記事中で例示されているプラグインを実際に書いてみました。以下に、そのプラグインを圧縮したziipを置きます。
このプラグインのインストール方法は普通のプラグインと同じで、MTのpluginsフォルダにこのTransformTemplateというフォルダをコピーするだけです。
インストールすると、ブログ記事を書く画面で、上図のように「foo_bar」という入力欄が追加されます。
正規表現を使わず、DOMで表示を変更しています。
以下メモ
- template_sourceとtemplate_paramとtemplate_outputで引数の取り方が違う。
- sub {$plugin->edit_entry}じゃないとだめ。¥\&edit_entryだとだめ。
SixApartさんにはもっとMTのオブジェクトリファレンスを充実してもらいたいです。
以下、ソース。
package MT::Plugin::TransformTemplate;
use strict;
use base qw( MT::Plugin);
my $plugin = new MT::Plugin::TransformTemplate({
id => 'TransformTemplate',
key => 'transform-template',
name => 'Transform Template',
description => "Tranform some template",
version => '0.1',
author_name => 'Shinichi Nozawa',
author_link => 'http://nozawashinichi.sakura.ne.jp/usingmt/',
plugin_link => 'http://www.nozawashinichi.sakura.ne.jp/usingmt/2008/08/transformer-callbacks.html',
});
MT->add_plugin($plugin);
sub init_registry {
my $plugin = shift;
$plugin->registry({
callbacks => {
'MT::App::CMS::template_param.edit_entry' => sub{ $plugin->edit_entry(@_); },
}
});
}
sub edit_entry {
my $plugin = shift;
my ($cb, $app, $param, $tmpl) = @_;
#記事編集画面のbasename(ファイル名)の上に空欄が表示されます。
# マーカーを取得
my $basename_field = $tmpl->getElementById('basename');
# 要素を生成
my $setting = $tmpl->createElement(
'app:setting',
{ id => 'foo_bar', required => 1 });
my $innerHTML = '<input type="text" name="foo_bar"
value="foo_bar"
id="foo_bar" />';
$setting->innerHTML($innerHTML);
# basenameの前に要素を付与
$tmpl->insertBefore($setting, $basename_field);
}
1;