Under the Bridge

a Picture of the Late Him

最小単位のプラグインを生成するサンプル(ファンクション、ブロック、モデファイア、コールバック)

2008年4月25日 23:20 | Writer: yoshi | 記事本文 | コメント(0) | トラックバック(0)

メモ的に。

ファンクションタグ、ブロックタグ、モデファイア、コールバックを生成する最小単位のプラグイン。レジストリを使用する。

ちなみに現在のところ読んでいる資料はこちら↓。英語サイトだが、コードはどうせ英語なんだし、フィーリングで読める。

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;

トラックバック(0)

このブログ記事を参照しているブログ一覧: 最小単位のプラグインを生成するサンプル(ファンクション、ブロック、モデファイア、コールバック)

このブログ記事に対するトラックバックURL:

コメントする






Categories
Entries
Feed
スポンサードリンク

parts

フィードメーター - Under the Bridge

あわせて読みたい

なかのひと

2008年4月5日開催、MT4LP5

2008 yoshi(apstar)