[Xoops] XCL覚書[1]

 作業記録ノートに書いたんだけど、こっちにも一応。
 ユーザ情報の項目を増やす方法について。
(註:これだけだとユーザ登録項目を増やしても DB には反映されない)
(註2:素人の Hack なので、真似してトラブっても責任はとれません(汗))


* * *
※注意!:Hack する際は後で箇所が分かるようにしておくこと。

1. phpMyAdmin でフィールドの追加
 {prefix}_user テーブルにフィールドを追加。
  ・数値:TINYINT(絶対値のみを扱うなら UNSIGNED に設定)
  ・文字列:VARCHAR

2. 言語定数ファイルの編集(これもHack?)
 出力する言語定数を編集する。
 扱うファイルは /modules/user/language 以下、各言語 main.php
  ・接頭語:_MD_USER
  ・用語種別:_LANG(単語), _MESSAGE(メッセージ), _ERROR(警告文)

3. *.php を Hack
 追加したフィールド(項目)をセットする。

・/karnel/user.php
function XoopsUser($id = null) {}(70行目~)内に
 $this->initVar(‘{項目名}’, XOBJ_DTYPE_{データ型}, 初期値, false);

・/modules/user/class/users.php
 /karnel/user.php と同じように編集。

・/modules/user/forms/EditUserForm.class.php
【function prepare()】
 // set properties
  $this->mFormProperties[‘{項目名}’] =& new XCube_{データ型}Property(‘{項目名}’);
 // set fields
  $this->mFieldProperties[‘{項目名}’] =& new XCube_FieldProperty($this);
  $this->mFieldProperties[‘{項目名}’]->setDependsByArray(array(‘{※判定内容}’));
   ※required : 入力の有無
   ※maxlength : 最大文字数
   ※minlength : 最小文字数
   ※intRange : 数値幅(下限と上限は後述)
  $this->mFieldProperties[‘{項目名}’]->addMessage(“{判定内容}”, _MD_USER_ERROR_{判定内容}, _MD_USER_LANG_{項目名}, “{判定基準値?}”);
  $this->mFieldProperties[‘{項目名}’]->addVar(“{判定内容}”, {判定基準値});

【function load(&$obj)】
 $this->set(‘{項目名}’, $obj->get(‘{項目名}’));

【function update(&$obj)】
 $obj->set(‘{項目名}’, $this->get(‘{項目名}’));

4. Default テンプレートをコピー
 [互換レンダーシステム] → [テンプレート管理] でテンプレをコピー。
 1回とっておけば OK。
 コピーをアクティブにして、こちらのテンプレを編集する。

5. テンプレートを編集
 [altsys] → [テンプレートの管理] でテンプレを編集する。

・/ユーザモジュール/user_edituser.html
【項目を直接入力】
get(‘{項目名}’)}>

【ラジオボタンで選択】

・/ユーザモジュール/user_userinfo.html
【項目をそのまま表示する場合】
getShow(‘{項目名}’)}>

【項目内容によって表示を条件分岐する場合】
 
  
 
  
 
  
 
 ※条件文で項目内容を扱うときは $thisUser->getShow(‘{項目名}’) を使う

6. 動作確認と保存
 動作確認して、成功していたらテンプレを Default 側にコピー。
 (別の編集をしたときのクロスチェック用)