続・モジュールを作ろう!(3) 新規登録時の初期値をセット
本記事は、Cubson というモジュール生成ツールを使った XOOPS のモジュール作成方法を解説するものです。
Cubson を使ってコード生成が出来る人,モジュールを作るために PHP を自分で調べながら学んでいこうという気がある人が対象です(すでに PHP を知っている人も,もちろん)。
本連載のコピペで何とかならない?,という人ではちょっと厳しいかも。
こんなときに使います
新規にデータを登録する際、登録者のユーザIDを一緒に記録することがよくありますが、そのIDは、ユーザに入れてもらうわけではもちろんなく、サーバ側で自動でセットすべきでしょう。
そのような場合に、actions/XxxEditForm.class.php に以下のサンプルようなコードを入れます。
サンプルコード
actions/XxxEditForm.class.php
function prepare() { parent::prepare(); if ($this->mObject->isNew()) { $this->mObject->set('uid', $this->mRoot->mContext->mXoopsUser->get('uid')); } }
解説
actions/XxxEditAction.class.php に prepare() メソッドを追加し、その中に初期値をセットするコードを書きます。その際、先頭に parent::prepare(); を忘れずに。
prepare() メソッドは、親クラスである class/AbstructEditAction.class.php で規定されています。parent::prepare(); は、その AbstructEditAction.class.php の prepare() メソッドを呼び出します。
$this->_setupObject(); $this->_setupActionForm();
の2行ですね。
その次、mObject の isNew() メソッドでは、新規登録か更新かを判断しています。Cubson の生成コードでは、リクエスト時にプライマリキー(xxx_id とか)が渡されていれば更新、そうでなければ新規登録扱いになります*1。
次の行の set() メソッドでユーザID(uid)をセットしています。
$this->mRoot->mContext->mXoopsUser->get('uid')
は、XOOPS Cube でログインしているユーザ自身の uid を取得するお決まりのコードです。
そのほか、GET で渡された引数を xoops_getrequest() メソッドで取り出してセットする、などがよく使われます。
$this->mObject->set('cat_id', xoops_getrequest('cat_id'));
とか。
*1:更新の場合はすでに値がセットされているはずなので、改めてセットしないわけです