MT4.1:エントリの既存DBへアクセスしてデータ取得
MTプラグイン系。
エントリの既存DBへアクセスしてデータ取得を行うためのメモ。
サンプルコード自体は役には立たないが、内部の構造を調べる上では少しは参考になるかも。
サンプル
package MT::Plugin::EntryFieldCheck;
use MT::Plugin;
use base qw(MT::Plugin);
our $VERSION = '0.1';
my $plugin = new MT::Plugin::EntryFieldCheck({
id => 'EntryFieldCheck',
key => 'entry_field_check',
name => 'EntryFieldCheck',
version => $VERSION,
description => '<MT_TRANS phrase=\'The Sample Entry Field Check \'>',
author_name => 'apstar',
author_link => 'http://www.mtde.info/',
});
MT->add_plugin($plugin);
sub init_registry
{
my $plugin = shift;
$plugin->registry({
tags => {
function => {
'GetData' => sub{&_hdlr_get_field;},
},
},
});
}
sub _hdlr_get_field {
my $arg = $_[1];
my $data = $_[0]->stash('entry') or return $_[0]->_no_entry_error($_[0]->stash('tag'));
my $basename = $data->basename;
my $title = $data->title;
my $text = $data->text;
return $basename .'<br />' .$title .'<br />' .$text;
}
1;
このコードの機能
そのエントリ自身のベースネームとタイトルと本文を取り出す。
メモ
上記コード自体は、\lib\MT\Template\ContextHandlers.pm内の、sub _hdlr_entry_body に記述されているもの。
ここ
my $data = $_[0]->stash('entry') or return $_[0]->_no_entry_error($_[0]->stash('tag'));
orの前は、$dataという変数でエントリの参照。
orの後は、エラー時の処理で、ContextHandlers.pm内のsub _no_entry_errorが呼び出される。この関数内の英語コメントには、「MTEntriesタグをコンテキスト外で使用してない?」的な記述がある。以下、sub_no_entry_erro関数のコード。まあ、どうでもいい。
sub _no_entry_error {
my $tag = $_[1];
$tag = 'MT' . $tag unless $tag =~ m/^MT/i;
return $_[0]->error(MT->translate(
"You used an '[_1]' tag outside of the context of an entry; " .
"perhaps you mistakenly placed it outside of an 'MTEntries' container?",
$tag));
}
ところで、このコードの sub _hdlr_get_field 関数は、以下のように書くことが出来る。こちらのほうが見やすい。
sub _hdlr_get_field {
my ($ctx, $args) = @_;
my $data = $ctx->stash('entry');
my $basename = $data->basename;
my $title = $data->title;
my $text = $data->text;
return $basename .'<br />' .$title .'<br />' .$text;
}
basenameとかtitleとかtextというのは、MTEntryBasenameやMTEntryTitleやMTEntryBodyで取得できるそれと等しい。これは「DBからのデータ取得」ということをファンクションタグでやっているわけで、その「MTタグ」と「処理を行う関数」の詳しい対比表(表ではないが)は、MT4.1jaの場合、ContextHandlers.pm内の307~345行目辺りを見るといいと思う。
ちなみにこのサンプルで扱ったbasenameやtitleやtextは、ずばりmt_entryテーブル内のフィールド名である。頭に"entry_"が付与されている。こちらの環境はXAMPPでMySQLを用いている。phpMyAdminでのスクリーンショットを以下に貼っておこう。
- カテゴリ:215プラグイン関係
トラックバック(0)
このブログ記事を参照しているブログ一覧: MT4.1:エントリの既存DBへアクセスしてデータ取得
このブログ記事に対するトラックバック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)
- 最小単位のプラグインを生成するサンプル(ファンクション、ブロック、モデファイア、コールバック)

コメントする