ホーム > web, コンピュータ > XOOPS Tips ユーザアカウント新規追加時に項目を追加

XOOPS Tips ユーザアカウント新規追加時に項目を追加

2009 年 7 月 11 日

snag-0174

photo by ntr23

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” 内へ追加項目を追記します。

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;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;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

web, コンピュータ , , , ,

  1. コメントはまだありません。
  1. トラックバックはまだありません。