スタッフの仕事の進捗がヤバげだったので急遽phpを担当することになってブロックタグの大物をMT5対応するためにガンダムBrand new APIと格闘してみたメモ書き。
# Power CMS for MTにはPHPプラグインが189もあるんだよ...
Twitter / Junnama Noda: MTのPHP API使ってアプリ開発してるのって日本でhoge人くらいなんだからこんなに力入れてガラッと変えなくても(泣)
さて、ブロックタグの中でのオブジェクトのロードや利用についてのメモを中心に。
エントリーをロード
$args['class'] = 'entry';
$args['blog_id'] = $blog_id;
$args['offset']=n;
$args['limit']=n;
$entries = $ctx->mt->db()->fetch_entries($args);
範囲指定をしてsqlでエントリー(や他のオブジェクト)を読み込む
$entries = $ctx->mt->db()->SelectLimit( $sql, $limit, $offset );
(範囲の指定無し)sqlを実行
$entries = $ctx->mt->db()->Execute( $sql );
読み込んだオブジェクト数の取得
$entries->RecordCount();
個々のレコードの取得
$entries->Move($counter);
$entry = $entries->FetchRow();
エントリーのオブジェクト化(但しcategoryやカスタムフィールドの読み込みはSQL側で調整する必要あり)
$e;
while(list ($key, $val) = each($entry)) {
if (preg_match('/^entry_/',$key)) {
$e->$key = $val;
}
}
# $ctx->stash('entry', $e);
特定のブログ記事オブジェクトの読み込み
$e = $ctx->mt->db()->fetch_entry($id);
特定のウェブページオブジェクトの読み込み
$e = $ctx->mt->db()->fetch_page($id);
Findでオブジェクトを読み込み
require_once 'class.mt_entry.php'; #entry
$_entry = new Entry;
$where = $where_statment;
$extra = array(
'limit' => $limit,
'offset' => $offset,
);
$results = $_entry->Find($where, false, false, $extra);

まるっと変えちゃったんですよ・・・。
DB廻り・・・。
これからプラグイン増えると良いなって思って・・・。
ドキュメント足りて無くてすいません・・・。
>YUJIさん
SelectLimitやExecuteで取得した場合にもEntryオブジェクトで得られる方法とかあるといいなぁ...(あるのかもしれんですが)とりあえずSelectLimitでmt_entry_entry_idを取得してfetch_entryして対処したんですが、ループの中で毎回fetch_entryするのが嫌で...
# てか、Saveってあるのに一番驚いた。管理画面PHPで書き直すつもりかと...
SelectLimitやExecuteで取得した場合にもEntryオブジェクトで得られる方法とかあるといいなぁ...(あるのかもしれんですが)とりあえずSelectLimitでmt_entry_entry_idを取得してfetch_entryして対処したんですが、ループの中で毎回fetch_entryするのが嫌で...
そうですね、今はmtdb.base.phpの中にも定義してあるんですけど単にActiveRecordのをラップしてるだけなんで、そこまでやった方がいいですねぇ
#なんで単純ラップだけで実装やめたんだろう・・
#そうか、ダイナミック側はSQL何でも通していたからクラス化しようにもSQLをパースしてごにょごにょしないとだからそこまでやる時間なかったんだ・・・
Saveは必要ないなと思っていたんですけど、MT_SESSIONだったけかなで必要だったので最後に追加しましたw チェックとか一切しないんでまだ危険ですw
管理画面をPHPで書き換える話はありましたw でもまだそこまでの機能はw
まだまだ実装足りないと思ってますので今の仕組みのままで進化させたいと思ってます。