続・モジュールを作ろう!(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:更新の場合はすでに値がセットされているはずなので、改めてセットしないわけです