最小単位のプラグインを生成するサンプル(ファンクション、ブロック、モデファイア、コールバック)
メモ的に。
ファンクションタグ、ブロックタグ、モデファイア、コールバックを生成する最小単位のプラグイン。レジストリを使用する。
ちなみに現在のところ読んでいる資料はこちら↓。英語サイトだが、コードはどうせ英語なんだし、フィーリングで読める。
http://www.movabletype.org/documentation/developer/※2008/05/06 コールバックを追加
ファンクションタグ
プラグインで拡張したファンクションタグである<MTSampleFunction>と記述すると、「This Is Sample」を返すだけのサンプル。
package MT::Plugin::SampleFunction;
use MT::Plugin;
use base qw(MT::Plugin);
our $VERSION = '0.1';
my $plugin = new MT::Plugin::SampleFunction({
id => 'SampleFunction',
key => 'sample_function',
name => 'SampleFunction',
version => $VERSION,
description => '<MT_TRANS phrase=\'The Sample Function \'>',
author_name => 'apstar',
author_link => 'http://www.mtde.info/',
});
MT->add_plugin($plugin);
sub init_registry
{
my $plugin = shift;
$plugin->registry({
tags => {
function => {
'SampleFunction' => \&_hdlr_samplefunction,
},
},
});
}
sub _hdlr_samplefunction {
my ($ctx, $args) = @_;
my $out = 'This Is Sample';
}
1;
ブロックタグ
プラグインで拡張された MTSampleBlock ~ /MTSampleBlock ブロックタグで囲むと、単に「from」「to」という文字列で、中で実行された出力結果を括る。
package MT::Plugin::SampleBlock;
use MT::Plugin;
use base qw(MT::Plugin);
our $VERSION = '0.1';
my $plugin = new MT::Plugin::SampleBlock({
id => 'SampleBlock',
key => 'sample_block',
name => 'SampleBlock',
version => $VERSION,
description => '<MT_TRANS phrase=\'The Solid Set Block \'>',
author_name => 'apstar',
author_link => 'http://www.mtde.info/',
});
MT->add_plugin($plugin);
sub init_registry {
my $plugin = shift;
$plugin->registry({
tags => {
block => {
'SampleBlock' => \&_hdlr_sampleblock,
},
},
});
}
sub _hdlr_sampleblock {
my ($ctx, $args, $cond) = @_;
my $builder = $ctx->stash('builder');
my $tokens = $ctx->stash('tokens');
my $out = $builder->build ($ctx, $tokens, $cond);
return $ctx->error ($builder->errstr) if !defined $out;
'from '. $out .' to';
}
1;
モデファイア
プラグインで拡張された appendtext、prependtext モデファイアを付加(例:MTCategoryLabel appendtext="1")すると、モデファイアを指定したタグの出力結果の前か後へ文字列を付加する。
package MT::Plugin::SampleModifier;
use MT::Plugin;
use base qw(MT::Plugin);
our $VERSION = '0.1';
my $plugin = new MT::Plugin::SampleModifier({
id => 'SampleModifier',
key => 'sample_modifier',
name => 'SampleModifier',
version => $VERSION,
description => '<MT_TRANS phrase=\'The Sample Add Modifier \'>',
author_name => 'apstar',
author_link => 'http://www.mtde.info/',
});
MT->add_plugin($plugin);
sub init_registry
{
my $plugin = shift;
$plugin->registry({
tags => {
modifier => {
'appendtext' => \&_fltr_lolcatsa,
'prependtext' => \&_fltr_lolcatsb,
},
},
});
}
sub _fltr_lolcatsa {
my ($str, $val, $ctx) = @_;
return "$str after add";
}
sub _fltr_lolcatsb {
my ($str, $val, $ctx) = @_;
return "before add $str";
}
1;
コールバック(2008/05/06 追記)
下記のようなプラグインを入れると、再構築時に/bodyタグの直前にプラグイン中で与えた文字列を3つ埋め込む。
package MT::Plugin::SampleCallback;
use MT::Plugin;
use base qw(MT::Plugin);
our $VERSION = '0.1';
my $plugin = new MT::Plugin::SampleCallback({
id => 'SampleCallback',
key => 'sample_callback',
name => 'SampleCallback',
version => $VERSION,
description => '<MT_TRANS phrase=\'The Sample Add Callback \'>',
author_name => 'apstar',
author_link => 'http://www.mtde.info/',
});
MT->add_plugin($plugin);
sub init_registry
{
my $plugin = shift;
$plugin->registry({
callbacks => {
'BuildPage' => \&_build_page,
},
});
}
sub _build_page {
my ($eh, %args) = @_;
my $data1 = '01234567890';
my $data2 = 'abcdefg';
my $data3 = '+-+-+-+-+-+-+-+-+-+-+-+-+-+-';
my $html = << "HTML";
<p>$data1</p>
<p>$data2</p>
<p>$data3</p>
HTML
my $contentref = $args{Content};
$$contentref =~ s!</body>!$html\n</body>!;
return 1;
}
1;
- カテゴリ:215プラグイン関係
トラックバック(0)
このブログ記事を参照しているブログ一覧: 最小単位のプラグインを生成するサンプル(ファンクション、ブロック、モデファイア、コールバック)
このブログ記事に対するトラックバックURL:
- Categories
- Entries
-
- 管理画面を拡張する(メニューとメソッド追加)
- MT4.1:追加したファンクションタグのみへモデファイア追加
- MT4.1:エントリの既存DBへアクセスしてデータ取得
- MT4.1:MTの計算機能を拡張するプラグイン(CalcExp)開発の話
- MT4.1:MTの計算機能を拡張するプラグイン(CalcExp)配布
- MT4.1:営業日(休日)をイッパツで表現するカレンダープラグイン(改)
- MT4.1:プラグイン作成におけるDBへのフィールド追加について(プラグイン設定編)
- MT4.1:プラグイン作成におけるDBへのフィールド追加について(ブログ毎編)
- MT4.1:プラグイン作成におけるDBへのフィールド追加について(カテゴリ編)
- MT4.1:プラグイン作成におけるDBへのフィールド追加について(エントリ編)
- MT4.1:カテゴリの並べ替え(オリジナルプラグイン+ハッシュ変数)
- サンプルプラグインを手入力した(AddField)
- MT4.1:営業日(休日)をイッパツで表現するカレンダープラグイン
- サンプルプラグインを手入力した(RandomEntry)
- 最小単位のプラグインを生成するサンプル(ファンクション、ブロック、モデファイア、コールバック)

コメントする