USER_moduleに項目を追加したい、または削除したい場合
この記事を書く前に筆者もユーザーモジュールで実際途方にくれていた。
そのときXoops Tips GigasMegasで項目追加の詳細を掲載していてくれた。
http://gigasmegas.com/?p=1226
感謝とお詫びですが、この記事を書くにあたって事前承諾なく参考にさせていただきました。
今回の例では「ほげ」という項目を増やしたいので、hogeという変数名を使用。
任意で必要なものに変える。他とかぶらなければ何でもOK。
以下は編集するファイルだ。
▼XOOPSのhtml/kernel/user.php
▼XOOPSのhtml/modules/user/class/users.php
▼XOOPSのhtml/modeules/user/forms/UserRegisterEditForm.class.php
▼XOOPSのhtml/modeules/user/forms/EditUserForm.class.php
▼XOOPSのhtml/modeules/user/admin/forms/UserAdminEditForm.class.php
▼XOOPSのhtml/modules/user/templates/user_register_form.html
▼XOOPSのhtml/modules/user/templates/user_register_confirm.html
▼XOOPSのhtml/modules/user/templates/user_edituser.html
▼XOOPSのhtml/modules/user/admin/templates/user_edit.html
▼XOOPSのhtml/modules/user/admin/temlates/user_view.html
▼XOOPSのhtml/modules/user/admin/temlates/user_userinfo.html
▼XOOPSのhtml/modeules/user/language/該当の言語/main.php
すべての工程はこれら計12ファイルの編集と、データベースの編集がある。
生半可じゃない。
誰かMTとかWORDPRESSみたいなカスタムフィールドくっつけてください。
しかしそれでも増やしたいというならば問答無用で以下の手順。
--------------------------------------------------------
●データベースの修正
まずはデータベースの修正だ。
編集はphpMyAdminやSQLコマンドラインからでもなんでもいい。
以下を増やしたい項目を入れたい項目と項目との間に追加する。
hoge
varchar 100
デフォルト値 null
これがわからなければ今回は難しいので、やめておくこと。
※どうしても必要な場合はphpMyAdminの勉強を少しすればいい。
サーバーによってはphpMyAdminを実装してないので、サーバーの仕様にあわせたデータベース編集が必要だ。
--------------------------------------------------------
●PHPの編集
次はPHPを編集する。PHPの知識は要らない。
周りのコードをよく見て、コピーして追加すればいいだけだ。
ただし、間違えると真っ白になって管理画面すら入れなくなってしまうので注意だ。
FTPでバックアップをしっかりとってから行おう。
直せなくなってからでは遅いからだ。
PHPはアップデートしなくてもすぐに反映される。
/*------ フォルダ XOOPSのhtml/kernel/ --------*/
▼XOOPSのhtml/kernel/user.php
★コアのハックなので、失敗すると真っ白になって管理画面すら入れなくなってしまう。
バックアップを取って行うこと。
・Function ”XoopsUser” 内へ追加項目を追記
$this-> initVar('hoge', XOBJ_DTYPE_TXTBOX, null, false, 100);
・// Added two fields, notify_method, notify_mode
if ($user-> isNew()) { ……
内の $sql 二つに必要な項目を追記
$sql = sprintf("INSERT INTO 〜
$sql = sprintf(”UPDATE %s SET uname = %s, 〜
ここの$sql = 2つの修正はけっこう大変だ。注意深くやる。解説するのも難しい。
ただ、しっかりとこの長い一文を追って、増やしたものに関する項目をちゃんと増やしていけば出来るはずだ。
/*------ フォルダ XOOPSのhtml/modules/user/class/ --------*/
▼XOOPSのhtml/modules/user/class/users.php
Function、”UserUsersObject”へhoge項目を追記
$this-> initVar('hoge', XOBJ_DTYPE_STRING, '', false, 100);
/*------ フォルダ XOOPSのhtml/modeules/user/forms/ --------*/
▼XOOPSのhtml/modeules/user/forms/UserRegisterEditForm.class.php
Function、”prepare”、”// Set form properties”へhoge項目を追記
$this-> mFormProperties['hoge'] =& new XCube_StringProperty('hoge');
Function、”prepare”、”// Set field properties”へhoge項目を追記
$this-> mFieldProperties['hoge'] =& new XCube_FieldProperty($this);
$this-> mFieldProperties['hoge']-> setDependsByArray(array('maxlength'));
$this-> mFieldProperties['hoge']-> addMessage("maxlength", _MD_USER_ERROR_MAXLENGTH, _MD_USER_LANG_HOGE, "100");
$this-> mFieldProperties['hoge']-> addVar("maxlength", 100);
Function、”update”へhoge項目を追記
$obj-> set('hoge', $this-> get('hoge'));
▼XOOPSのhtml/modeules/user/forms/EditUserForm.class.php
User_EditUserFormクラス>Function prepare>set propertiesに追加項目
$this-> mFormProperties['hoge'] =& new XCube_StringProperty('hoge');
// set fieldsに追加項目
$this-> mFieldProperties['hoge'] =& new XCube_FieldProperty($this);
$this-> mFieldProperties['hoge']-> setDependsByArray(array('maxlength'));
$this-> mFieldProperties['hoge']-> addMessage("maxlength", _MD_USER_ERROR_MAXLENGTH, _MD_USER_LANG_HOGE, "100");
$this-> mFieldProperties['hoge']-> addVar("maxlength", 100);
User_EditUserFormクラス>Function loadに項目を追加
$this-> set('hoge', $obj-> get('hoge'));
User_EditUserFormクラス>Function updateに項目を追加
$obj-> set('hoge', $this-> get('hoge'));
/*------ フォルダ XOOPSのhtml/modeules/user/admin/forms/ --------*/
▼XOOPSのhtml/modeules/user/admin/forms/UserAdminEditForm.class.php
User_User_UserAdminEditFormクラス>Function prepare>set propertiesに追加項目
$this-> mFormProperties['hoge'] =& new XCube_StringProperty('hoge');
// set fieldsに追加項目
$this-> mFieldProperties['hoge'] =& new XCube_FieldProperty($this);
$this-> mFieldProperties['hoge']-> setDependsByArray(array('maxlength'));
$this-> mFieldProperties['hoge']-> addMessage("maxlength", _MD_USER_ERROR_MAXLENGTH, _MD_USER_LANG_HOGE, "100");
$this-> mFieldProperties['hoge']-> addVar("maxlength", 100);
User_UserAdminEditFormクラス>Function loadに項目を追加
$this-> set('hoge', $obj-> get('hoge'));
User_UserAdminEditFormクラス>Function updateに項目を追加
$obj-> set('hoge', $this-> get('hoge'));
以上でPHPの編集は終わり。
--------------------------------------------------------
●テンプレートの編集
テンプレートの編集をしたら管理画面から
ユーザー管理モジュールのアップデートを行うこと。
アップデートを行わなければいつまでたっても反映されないので注意。
もしアップデート作業が面倒な場合には、XOOPS カスタマイズのやり方
http://blog.goo.ne.jp/remember_blog/e/2bcc1ffea6dc7abd32971c7fa1ca2041
で紹介したカスタマイズの準備をするといい。
よくわからない場合は以下の作業を間違いなく行って、管理画面からユーザー管理モジュールのアップデートを行えばいい。
/*------ フォルダ XOOPSのhtml/modules/user/templates/ --------*/
▼XOOPSのhtml/modules/user/templates/user_register_form.html
<tr>
<td class="head"> hoge</td>
<td class="<{cycle values="odd,even"}> ">
<{xoops_input maxlength=100 name=hoge value=$actionForm-> get('hoge')}>
</td>
</tr>
▼XOOPSのhtml/modules/user/templates/user_register_confirm.html
<tr>
<td class="head"> hoge</td>
<td class="<{cycle values="odd,even"}> ">
<{$registForm-> get('hoge')|xoops_escape}>
</td>
</tr>
▼XOOPSのhtml/modules/user/templates/user_edituser.html
<tr>
<td class="head"> hoge</td>
<td class="<{cycle values="odd,even"}> ">
<{xoops_input name=hoge size=30 maxlength=100 value=$actionForm-> get('hoge')}>
</td>
</tr>
・input属性 ”name”に追加したい項目名を入力。
・input属性 ”size”に表示したいサイズを入力。
・input属性 ”maxlength”に最大文字数を入力。
・getに追加したい項目名(例はhoge)を入力。
/*------ フォルダ XOOPSのhtml/modules/user/admin/templates/ --------*/
▼XOOPSのhtml/modules/user/admin/templates/user_edit.html
<tr>
<td class="head"> hoge</td>
<td class="<{cycle values="odd,even"}> ">
<{xoops_input type=text name=hoge value=$actionForm-> get('hoge') size=30 maxlength=100}>
</td>
</tr>
▼XOOPSのhtml/modules/user/admin/temlates/user_view.html
<tr>
<td class="head"> hoge</td>
<td class="<{cycle values='odd,even'}> ">
<{$object-> getShow('hoge')}>
</td>
</tr>
▼XOOPSのhtml/modules/user/admin/temlates/user_userinfo.html
<tr valign="top">
<td class="head"> hoge</td>
<td class="<{cycle values='odd,even'}> "> <{$thisUser-> getShow('hoge')}> </td>
</tr>
以上が終わったらユーザー管理モジュールをアップデート。
--------------------------------------------------------
●言語
最後は”ほげ”と項目の名前を表示させなければならない。
この段階では_MD_USER_LANG_HOGEと表示されるだけだ。
▼XOOPSのhtml/modeules/user/language/該当の言語/main.php
define('_MD_USER_LANG_HOGE', "ほげ");
--------------------------------------------------------
以上でユーザーモジュールに項目を追加できるようになる。
消したいときはこの逆で、消したい項目を消せばいい。
ただ、全て消さなくても、テンプレートから表示させないようにするだけでもいいわけだ。
セキュリティ上全て殺したい場合にはやはり順を追って削除していけばいいだろう。