「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
MT5のPHP APIを探る(その5)
「MT5のPHP APIを探る」の第5回をお送りします。
今回は、レコードを保存する方法を紹介します。
1.Saveメソッド
オブジェクトを新規作成して保存する場合は、「Save」というメソッドを使います。
オブジェクトを作成した後、各プロパティを設定した後、Saveメソッドを実行します。
ただ、保存できるとは言え、内部的に使われるフィールドにも値を設定しなければならないので、オブジェクトの構造をよく理解している必要があります。
たとえば、以下のようにブログ記事を作成して、保存したいとします。
| 項目 | 内容 |
|---|---|
| タイトル | テスト |
| 本文 | テストのブログ記事です |
| ブログのID | 2 |
| ユーザーのID | 1 |
| 公開状態 | 公開(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でオブジェクトを保存することは、あまりお勧めできません。
