MT5のPHP APIを探る(その5)

「MT5のPHP APIを探る」の第5回をお送りします。
今回は、レコードを保存する方法を紹介します。

1.Saveメソッド

オブジェクトを新規作成して保存する場合は、「Save」というメソッドを使います。
オブジェクトを作成した後、各プロパティを設定した後、Saveメソッドを実行します。

ただ、保存できるとは言え、内部的に使われるフィールドにも値を設定しなければならないので、オブジェクトの構造をよく理解している必要があります。

たとえば、以下のようにブログ記事を作成して、保存したいとします。

項目内容
タイトルテスト
本文テストのブログ記事です
ブログのID2
ユーザーのID1
公開状態公開(2)
ベースネームtestentry
作成日時2010年1月19日0時0分0秒
公開日時2010年1月19日0時0分0秒
フォーマット改行を変換
トラックバックの許可許可する(1)
コメントの許可許可する(1)

実際にこの処理をプログラムにすると、以下のようになります。

<?php
set_include_path(get_include_path() . PATH_SEPARATOR . '/www/mt5/php');
require_once('mt.php');
$cfg_file = 'mt-config.cgi';
$mt = MT::get_instance(null, $cfg_file);

require_once('lib/class.mt_entry.php');
$entry = new Entry;
$entry->title = 'テスト';
$entry->text = 'テストのブログ記事です';
$entry->blog_id = 2;
$entry->author_id = 1;
$entry->status = 2;
$entry->basename = 'testentry';
$entry->created_on = '20100119000000';
$entry->authored_on = '20100119000000';
$entry->convert_breaks = '__default__';
$entry->allow_pings = 1;
$entry->allow_comments = 1;
$entry->class = 'entry';
$entry->ping_count = 0;
$entry->comment_count = 0;
$entry->week_number = '201002';
$entry->created_by = 1;
$entry->current_revision = 0;
$entry->Save();
?>

19行目までは、表にあげた各項目を、オブジェクトのプロパティに設定する処理です。
一方、20~25行目は、内部的に使われるプロパティを設定する処理です。

2.Updateメソッド

既存のオブジェクトを読み込んで、その内容を修正した後で保存しなおす場合は、「Update」というメソッドを使います。
たとえば、変数$entryが既存のブログ記事のオブジェクトを指している場合、「$entry->Update();」とすることで、そのブログ記事を保存しなおすことができます。

3.Perlのコールバックとの兼ね合い

PerlのAPIでは、オブジェクトの保存の前後にコールバックを設定して、それらのタイミングで処理を行うことができます。
MT本体も、ところどころでコールバックを利用しています。
また、プラグインの中にも、コールバックを利用しているものがあります。

しかし、PHPでオブジェクトを保存した場合、Perlのコールバックは呼び出されません。
そのため、MT本体や、Perlのプラグインの動作に、支障が出ることがあり得ます。
このことから考えると、PHPでオブジェクトを保存することは、あまりお勧めできません。

MT Cloud Starter Kit
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください