XOOPS Tips ユーザアカウント新規追加時に項目を追加
6月、7月とXoopsサイトの構築を行っていますが、Xoopsのユーザ管理にてユーザーアカウントの項目の追加などをHackしなければならなくなりました。
Xoopsのユーザ管理(項目の追加など)はまだまだ貧弱ですね。
ユーザ管理モジュールもminihakuをインストールしてみたのですが、Xoops Cube 2.1以降だとエラーが出るようなので、自前で改造することにしました。
Xoopsでユーザを新規追加時の項目を増やすには以下のファイルを編集する必要があります。
- Userモジュールテンプレート関係
-
- Root/modules/user/templates/user_register_form.html
- Root/modules/user/templates/user_register_confirm.html
- Xoopsコアファイル
-
- Root/kernel/user.php
- Userモジュールファイル(テンプレート以外)
-
- ROOT/modules/user/class/users.php
- Root/modeules/user/forms/UserRegisterEditForm.class.php
新規項目をusersテーブルへ追加
今回、実験的にhogeという項目を増やし、新規追加時に登録できるよう改造します。
- hoge
-
varchar 100
デフォルト値 null
この項目を、phpMyAdminなり、コマンドラインなりで、usersテーブルへ追加。
Root/kernel/user.phpへ項目設定を追記
Root/kernel/user.phpのFunction ”XoopsUser” 内へ追加項目を追記します。
$this->initVar('hoge', XOBJ_DTYPE_TXTBOX, null, false, 100);
Root/kernel/user.phpのInsert文を修正
データ項目設定は、設定すればXoopsのユーザモジュールが判別して、表示など行ってくれますが、データのInsert(追加)、Update(更新)については、SQL文を手動で設定する必要あります。
恐ろしく、長い一文がFunction ”insert”にあります。
$sql = sprintf(“INSERT INTO ~
この一行がInsert文で、新規追加時に発行されます。
ここへ、今回、追加する項目である、”hoge”をInsertされるよう追記します。
ユーザモジュール、テンプレートファイルの修正
新規追加時の使用するテンプレートファイルは2種類あります。
入力用のuser_register_form.html
確認用のuser_register_confirm.html
この2種類のファイルはXoops管理画面内、Altsysなどから修正してください。
user_register_form.htmlの修正
今回、追加する項目である、”hoge”が新規追加項目として表示されるように、Xoops管理画面内、Altsysなどから修正します。
以下のコードをHTMLのTable内へ挿入します。
<tr> <td class="head">新規追加項目hoge</td> <td class="<{cycle values="odd,even"}>"><{xoops_input maxlength=100 name=hoge value=$actionForm->get('hoge')}></td> </tr>
user_register_confirm.htmlの修正
新規ユーザ登録画面から、送信ボタンを押すとデータ確認画面が表示されます。
このデータ確認画面にてhogeも表示されるよう修正します。
以下のコードをHTMLのTable内へ挿入します。
<tr> <td class="head">新規追加項目hoge</td> <td class="<{cycle values="odd,even"}>"> <{$registForm->get('hoge')|xoops_escape}> </td> </tr>
Userモジュールファイル ROOT/modules/user/class/users.phpの修正
ROOT/modules/user/class/users.php内、Function、”UserUsersObject”へhoge項目を追記します。
$this->initVar('hoge', XOBJ_DTYPE_STRING, '', false, 100);
Root/modeules/user/forms/UserRegisterEditForm.class.phpの修正
Root/modeules/user/forms/UserRegisterEditForm.class.php内、Function、”prepare”、”// Set form properties”へhoge項目を追記します。
$this->mFormProperties['hoge'] =&amp;amp;amp;amp;amp;amp; new XCube_StringProperty('hoge');
Root/modeules/user/forms/UserRegisterEditForm.class.php内、Function、”prepare”、”// Set field properties”へhoge項目を追記します。
$this->mFieldProperties['hoge'] =&amp;amp;amp;amp;amp;amp;amp; new XCube_FieldProperty($this); $this->mFieldProperties['hoge']->setDependsByArray(array('maxlength')); $this->mFieldProperties['hoge']->addVar('maxlength', 100);
Root/modeules/user/forms/UserRegisterEditForm.class.php内、Function、”update”へhoge項目を追記します。
$obj->set('hoge', $this->get('hoge'));
実際に、Xoopsへユーザを新規追加してみて確認します。
ここまでの処理で、新規追加時に項目を増やし、データベースへ反映させることができます。
項目を増やした際、この後、しなければならない処理がいくつもあります。
- 新規追加時の必須項目、データ検証
- 表側サイト内での、ユーザ編集、表示画面に関する修正
- Xoops管理画面内での、ユーザ編集、表示画面に関する修正
それぞれに今回と同じくらいの処理が必要かと思われます。
う~~ん、しっかり面倒ですね………
関連するエントリー
- None Found