MT4.1:プラグイン作成におけるDBへのフィールド追加について(エントリ編)
書き捨てのファンクションタグなどではなく、揮発しない設定系のデータをシステムへ追加する場合には、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);
}
- カテゴリ:215プラグイン関係
トラックバック(0)
このブログ記事を参照しているブログ一覧: MT4.1:プラグイン作成におけるDBへのフィールド追加について(エントリ編)
このブログ記事に対するトラックバックURL:
- Categories
- Entries
-
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(Ver0.5)
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(Ver0.4)
- memo:perlでプラグイン Image::ExifとImage::Info
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(Ver0.3)
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(Ver0.2)
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(GPS Ready)
- MT4:エントリのURLをQRコードで自動生成する
- MT4.2:QRコード画像を生成するプラグイン(改)
- 嵌りメモ(perlのxampp環境でのファイル吐き出し実験)
- MT4.2:QRコード画像を生成するプラグイン
- MT4.2:JPEGファイルのEXIF情報を取得するプラグイン(失敗)
- 管理画面を拡張する(メニューとメソッド追加)
- 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)
- 最小単位のプラグインを生成するサンプル(ファンクション、ブロック、モデファイア、コールバック)
コメントする