本名 → 氏名 に変更したいときなど。
下記ファイルを編集します。
/modules/user/language/japanese/main.php
Xoops Cube Legacy-2.1.x
Xoopsのユーザー情報設定は硬直的で、追加したり減らしたりが難しいです。
ICQ、AIM、YIMなどのいらない情報をHTMLテンプレート上で消すことは簡単ですが、項目を追加するとなるとひと手間かかります。
Xoops ユーザー情報をカスタマイズする]][[Xoops ユーザー情報をカスタマイズする2の続きで、ここではユーザー情報の編集フォームedituser.phpからデータベースの情報を編集したり、すでに入っている情報を取得するところを記載します。
Xoops ユーザー情報をカスタマイズする]][[Xoops ユーザー情報をカスタマイズする2の手順は終わっているものとします。
例では、名前のふりがなを入力する”furigana”という項目を作ります。
furiganaという項目には、フリーのテキストが入るとします。
ここでは、ユーザー情報のアップデート・編集までを紹介します。
function UserUsersObject()内に下記のように付け加えます。
$this->initVar('furigana', XOBJ_DTYPE_STRING, '', false);
function prepare() 内に下記のように付け加えます。
$this->mFormProperties['furigana'] =& new XCube_StringProperty('furigana');
$this->set('furigana', $obj->get('furigana'));
$obj->set('furigana', $this->get('furigana'));
これで、ユーザー情報の編集時に、すでに入っている情報が入るようになります。(デフォルトのvalueの値)
管理画面を編集する場合は、同様に
/modules/user/admin/forms/UserAdminEditForm.class.php
などを編集します。
Xoops Cube Legacy-2.1.x
Xoopsのユーザー情報設定は硬直的で、追加したり減らしたりが難しいです。
ICQ、AIM、YIMなどのいらない情報をHTMLテンプレート上で消すことは簡単ですが、項目を追加するとなるとひと手間かかります。
Xoops ユーザー情報をカスタマイズするの続きで、ここではデータベースに情報を登録するまでを記載します。
Xoops ユーザー情報をカスタマイズするの手順は終わっているものとします。
例では、invitationという項目を作ります。
invitationという項目には、フリーのテキストが入るとします。
ここでは、まずユーザー新規登録のフォームの修正と、データベースへの入力までを紹介します。
function insert
内のSQL文を編集します。ここでは、SQLの項目の最後にinvitationという項目を追加しています。
$sql = sprintf( "INSERT INTO %s ( uid, uname, name, email, url, user_avatar, user_regdate, user_icq, user_from, user_sig, user_viewemail, actkey, user_aim, user_yim, user_msnm, pass, posts, attachsig, rank, level, theme, timezone_offset, last_login, umode, uorder, notify_method, notify_mode, user_occ, bio, user_intrest, user_mailok, invitation) VALUES (%u, %s, %s, %s, %s, %s, %u, %s, %s, %s, %u, %s, %s, %s, %s, %s, %u, %u, %u, %u, %s, %.2f, %u, %s, %u, %u, %u, %s, %s, %s, %u, %s)", $this->db->prefix('users'), $uid, $this->db->quoteString($uname), $this->db->quoteString($name), $this->db->quoteString($email), $this->db->quoteString($url), $this->db->quoteString($user_avatar), time(), $this->db->quoteString($user_icq), $this->db->quoteString($user_from), $this->db->quoteString($user_sig), $user_viewemail, $this->db->quoteString($actkey), $this->db->quoteString($user_aim), $this->db->quoteString($user_yim), $this->db->quoteString($user_msnm), $this->db->quoteString($pass), $posts, $attachsig, $rank, $level, $this->db->quoteString($theme), $timezone_offset, 0, $this->db->quoteString($umode), $uorder, $notify_method, $notify_mode, $this->db->quoteString($user_occ), $this->db->quoteString($bio), $this->db->quoteString($user_intrest), $user_mailok, $this->db->quoteString($invitation)); }
上記は新規ユーザー登録時ですね。
ユーザー情報編集時は、分岐した場合のSQL文を同じように編集します。
$sql = sprintf( "UPDATE %s SET uname = %s, name = %s, email = %s, url = %s, user_avatar = %s, user_icq = %s, user_from = %s, user_sig = %s, user_viewemail = %u, user_aim = %s, user_yim = %s, user_msnm = %s, posts = %d, pass = %s, attachsig = %u, rank = %u, level= %u, theme = %s, timezone_offset = %.2f, umode = %s, last_login = %u, uorder = %u, notify_method = %u, notify_mode = %u, user_occ = %s, bio = %s, user_intrest = %s, user_mailok = %u, invitation = %s WHERE uid = %u", $this->db->prefix('users'), $this->db->quoteString($uname), $this->db->quoteString($name), $this->db->quoteString($email), $this->db->quoteString($url), $this->db->quoteString($user_avatar), $this->db->quoteString($user_icq), $this->db->quoteString($user_from), $this->db->quoteString($user_sig), $user_viewemail, $this->db->quoteString($user_aim), $this->db->quoteString($user_yim), $this->db->quoteString($user_msnm), $posts, $this->db->quoteString($pass), $attachsig, $rank, $level, $this->db->quoteString($theme), $timezone_offset, $this->db->quoteString($umode), $last_login, $uorder, $notify_method, $notify_mode, $this->db->quoteString($user_occ), $this->db->quoteString($bio), $this->db->quoteString($user_intrest), $user_mailok, $this->db->quoteString($invitation)), $uid,; }
function prepare()内に
$this->mFormProperties['invitation'] =& new XCube_StringProperty('invitation');
を追加
function update()内に
$obj->set('invitation', $this->get('invitation'));
を追加
例ではユーザー新規登録時に利用する、user_register_form.htmlに次のように追記する。
ほかのテンプレートにおいても、次のような形で情報の取得が可能
<td class="head">お誘い</td> <td class="<{cycle values="odd,even"}>"> <{xoops_input name=invitation value=$actionForm->get('invitation') size=10 maxlength=32}> </td>
ちなみに、ユーザー情報変更のupdate文は、Xoops Cube Legacy2.1.8では、/kernel/user.php のupdate文ではやらなくなっているようです。modules\user\actions\EditUserAction.class.phpの_doExecute()がそれです。
しかし、パスワードリマインダ(パスワードを紛失した人に新しいパスワードを送る仕組み)は、上記のupdate文で行っているので、これはやはりきちんと変更しておきましょう。
続き:Xoops ユーザー情報をカスタマイズする3
Xoops Cube Legacy-2.1.x
Xoopsのユーザー情報設定は硬直的で、追加したり減らしたりが難しいです。
ICQ、AIM、YIMなどのいらない情報をHTMLテンプレート上で消すことは簡単ですが、項目を追加するとなるとひと手間かかります。
修正ファイル一覧
○phpファイル
・/kernel/user.php
・/modules/user/forms/UserRegisterEditForm.class.php
・/modules/user/class/users.php
・/modules/user/forms/EditUserForm.class.php
・/modules/user/admin/forms/UserAdminEditForm.class.php
・/preload/ThemeLanguage?.class.php (新しく作る)
○htmlファイル
/modules/user/admin/templates/user_view.html
/modules/user/admin/templates/user_search.html
/modules/user/admin/templates/user_edit.html
○ユーザーモジュールテンプレートファイル
・user_userinfo.html
・user_register_form.html
・user_register_confirm.html
・user_edituser.html
例では、invitationという項目を作ります。
invitationという項目には、フリーのテキストが入るとします。
ここでは、まず項目の設定と、データベースから読みだすまでを紹介します。
function XoopsUser
内に
$this->initVar('invitation', XOBJ_DTYPE_TXTBOX, null, false, null);
を追加
function invitation() { return $this->getVar("invitation"); }
<tr valign="top"> <td class="head">お誘い</td> <td class="<{cycle values='odd,even'}>"><{$thisUser->getShow('invitation')}></td> </tr>
「お誘い」の部分は、/preload/直下に、「ThemeLanguage.class.php」というファイルを作って、以下のように定義する。
user_userinfo.htmlに追記する部分は以下のようになる。
<tr valign="top"> <td class="head"><{$smarty.const._MD_USER_INVITATION}></td> <td class="<{cycle values='odd,even'}>"><{$thisUser->getShow('invitation')}></td> </tr>
データベースへ入力する部分は、Xoops ユーザー情報をカスタマイズする2で紹介します。
ちなみに
/modules/user/UserInfoAction.class.php
がユーザー情報表示本体です。
続き:Xoops ユーザー情報をカスタマイズする2
Xoopsのフォーラムが見れないという場合、次を試してみましょう。