MTOSカスタムフィールドを一つのプラグインにまとめる

進行中のサイト、カスタムフィールドに入力したデータが、ページでテーブルにいれ込んで表示するようにしました。
項目が15くらいあるんだけど、プラグイン15個つくってインストールしていました。バカ真面目だな私。
(プラグインの作成方法についての参考書:藤本 壱著「MTOS活用テクニック」ラトルズ発行)

でも、このタイプのページが二つあって、さすがに二つ目の時はうんざりしてしまい、参考書をみてたら、あるではないですが。「一つのプラグインで複数のフィールドを作成する」(う~ん。早く気付こうよ。)

超楽でした!

以下、自作マルチプラグイン「UKMulti.pl」

---------------------

package MT::Plugin::UKMulti;
use base 'MT::Plugin';

use strict;

use MT;
use MT::Plugin;
use MT::Template::Context;
use MT::Entry;


# register plugin
my $plugin = __PACKAGE__->new({
    name => 'MultiField',
    key => 'multi_field',
    version => '1.02',
    author_name => 'Yuko Watase',
    description => 'Add multi fields.',
    schema_version => '1.02',
});
MT->add_plugin($plugin);

# initialize registry
sub init_registry {
    my $plugin = shift;
    $plugin->registry({
        object_types => {
            'entry' => {
                'uk_gyousyu' => 'string(255)',
                'uk_area' => 'string(255)',
                'uk_mensekimini' => 'string(255)',
                'uk_mensekimax' => 'string(255)',
                'uk_otime' => 'string(255)',
                'uk_ctime' => 'string(255)',
                'uk_tenpof' => 'string(255)',
                'uk_sekiminif' => 'string(255)',
                'uk_sekimax' => 'string(255)',
            },

        },
        tags => {
            function => {
                UKgyousyu => \&uk_gyousyu,
                UKarea => \&uk_area,
                UKmensekimini => \&uk_mensekimini,
                UKmensekimax => \&uk_mensekimax,
                UKotime => \&uk_otime,
                UKctime => \&uk_ctime,
                UKtenpof => \&uk_tenpof,
    UKsekimini => \&uk_sekiminif,
    UKsekimax => \&uk_sekimax,


                },
        },
        callbacks => {
            'cms_pre_save.entry' => {
                priority => 9,
                code => \&save_entry_field,
            },
           
        }
   });
}

sub save_entry_field {
    my ($eh, $app, $entry, $orig_entry) = @_;

    $entry->uk_gyousyu($app->param('uk_gyousyu') || '');
 $entry->uk_area($app->param('uk_area') || '');
    $entry->uk_mensekimini($app->param('uk_mensekimini') || '');
    $entry->uk_mensekimax($app->param('uk_mensekimax') || '');
    $entry->uk_otime($app->param('uk_otime') || '');
    $entry->uk_ctime($app->param('uk_ctime') || '');
    $entry->uk_tenpof($app->param('uk_tenpof') || '');
    $entry->uk_sekiminif($app->param('uk_sekiminif') || '');
    $entry->uk_sekimax($app->param('uk_sekimax') || '');
 
    1;
}

 

 


sub uk_gyousyu {
    my ($ctx, $args) = @_;

    my $entry = $ctx->stash('entry')
        or return $ctx->_no_entry_error();
    $entry->uk_gyousyu || '';
}

sub uk_area {
    my ($ctx, $args) = @_;

    my $entry = $ctx->stash('entry')
        or return $ctx->_no_entry_error();
    $entry->uk_area || '';
}

sub uk_mensekimini {
    my ($ctx, $args) = @_;

    my $entry = $ctx->stash('entry')
        or return $ctx->_no_entry_error();
    $entry->uk_mensekimini || '';
}

sub uk_mensekimax {
    my ($ctx, $args) = @_;

    my $entry = $ctx->stash('entry')
        or return $ctx->_no_entry_error();
    $entry->uk_mensekimax || '';
}

sub uk_otime {
    my ($ctx, $args) = @_;

    my $entry = $ctx->stash('entry')
        or return $ctx->_no_entry_error();
    $entry->uk_otime || '';
}

sub uk_ctime {
    my ($ctx, $args) = @_;

    my $entry = $ctx->stash('entry')
        or return $ctx->_no_entry_error();
    $entry->uk_ctime || '';
}

sub uk_tenpof {
    my ($ctx, $args) = @_;

    my $entry = $ctx->stash('entry')
        or return $ctx->_no_entry_error();
    $entry->uk_tenpof || '';
}

sub uk_sekiminif {
    my ($ctx, $args) = @_;

    my $entry = $ctx->stash('entry')
        or return $ctx->_no_entry_error();
    $entry->uk_sekiminif || '';
}

sub uk_sekimax {
    my ($ctx, $args) = @_;

    my $entry = $ctx->stash('entry')
        or return $ctx->_no_entry_error();
    $entry->uk_sekimax || '';
}

1;

 

---------------------

コメントの投稿

トラックバック

トラックバック:URL http://watase.bz/mt/mt-tb.cgi/75