Under the Bridge

a Picture of the Late Him

MT4.1:プラグイン作成におけるDBへのフィールド追加について(エントリ編)

2008年5月 5日 15:36 | Writer: yoshi | 記事本文 | コメント(0) | トラックバック(0)

書き捨てのファンクションタグなどではなく、揮発しない設定系のデータをシステムへ追加する場合には、Movable Typeが扱うDBのテーブルへフィールドを追加して取り扱う。これの書き方とか、チェックの仕方についてメモ。

エントリ毎にデータを追加する

こういうコードがあったとする。

sub init_registry
{
    my $plugin = shift;
    $plugin->registry({
        object_types => {
           'entry' => {
              'add_field' => 'string(255)',
           },
        },
        callbacks => {
           'MT::App::CMS::template_param.edit_entry' => \&_param_transformer,
        },
        tags => {
            function => {
                'AddField' => sub{&_hdlr_add_field;},
            },
        },
    });
    
}

sub _hdlr_add_field {
    my ($ctx, $args) = @_;
    my $tag = 'AddField';
    (my $entry = $ctx->stash('entry')) || return $ctx->_no_entry_error('MT' . $tag);
    return $entry->add_field || '';
}

データの追加は以下の箇所。phpMyAdminで確認すると、mt_entryテーブルへ、entry_add_fieldという名前でフィールドが生成される。以後エントリに付随したこのフィールドへデータを書き込むと、エントリ毎に個別のレコードが生成される。以下例ではvarchar(255)で生成される。型やデータ長は色々変更できる。

        object_types => {
           'entry' => {
              'add_field' => 'string(255)',
           },
        },

データの取り出し方は以下の箇所。

sub _hdlr_add_field {
    my ($ctx, $args) = @_;
    my $tag = 'AddField';
    (my $entry = $ctx->stash('entry')) || return $ctx->_no_entry_error('MT' . $tag);
    return $entry->add_field || '';
}

DOMを用いてhtmlへ埋め込む例。これはMプ本からのコピペ。

sub _param_transformer {
    my ($eh, $app, $param, $tmpl) = @_;
    return unless UNIVERSAL::isa($tmpl, 'MT::Template');
    my $host_node = $tmpl->getElementById('keywords');
    my $innerHTML = '<div class="textarea-wrapper">
    <input name="add_field" id="add_field" class="full-width" 
    mt:watch-change="1" value="<$mt:var name="add_field" escape="html"$>" autocomplete="off" /></div>';
    my $blog = $app->blog;
    my $label = $plugin->add_field_label($blog->id);
    my $block_node = $tmpl->createElement(
       'app:setting',
       {
          id => 'add_field',
          label => $label,
          label_class => 'top-label',
       }
    );
    $block_node->innerHTML( $innerHTML );
    $tmpl->insertAfter($block_node, $host_node);
}

トラックバック(0)

このブログ記事を参照しているブログ一覧: MT4.1:プラグイン作成におけるDBへのフィールド追加について(エントリ編)

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

コメントする






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

parts

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

あわせて読みたい

なかのひと

2008 yoshi(apstar)