Xoops ユーザー情報をカスタマイズする2

Xoops

Xoops ユーザー情報に好きな項目を追加する2

Xoops Cube Legacy-2.1.x

Xoopsのユーザー情報設定は硬直的で、追加したり減らしたりが難しいです。
ICQ、AIM、YIMなどのいらない情報をHTMLテンプレート上で消すことは簡単ですが、項目を追加するとなるとひと手間かかります。

Xoops ユーザー情報をカスタマイズするの続きで、ここではデータベースに情報を登録するまでを記載します。
Xoops ユーザー情報をカスタマイズするの手順は終わっているものとします。

注意:下記の手順はソースコードのHackになります。バックアップを取って自己責任で行ってください。MySQLやPHPの知識がある人向けです。

例では、invitationという項目を作ります。
invitationという項目には、フリーのテキストが入るとします。
ここでは、まずユーザー新規登録のフォームの修正と、データベースへの入力までを紹介します。

  • /kernel/user.php

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,;
        }
  • /modules/user/forms/UserRegisterEditForm.class.phpにて、

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 を使った会員制サイトの構築はこちら

Xoops ユーザー情報をカスタマイズする3

Xoops

Xoops ユーザー情報に好きな項目を追加する3

Xoops Cube Legacy-2.1.x

Xoopsのユーザー情報設定は硬直的で、追加したり減らしたりが難しいです。
ICQ、AIM、YIMなどのいらない情報をHTMLテンプレート上で消すことは簡単ですが、項目を追加するとなるとひと手間かかります。

Xoops ユーザー情報をカスタマイズする]][[Xoops ユーザー情報をカスタマイズする2の続きで、ここではユーザー情報の編集フォームedituser.phpからデータベースの情報を編集したり、すでに入っている情報を取得するところを記載します。

Xoops ユーザー情報をカスタマイズする]][[Xoops ユーザー情報をカスタマイズする2の手順は終わっているものとします。

注意:下記の手順はソースコードのHackになります。バックアップを取って自己責任で行ってください。MySQLやPHPの知識がある人向けです。

例では、名前のふりがなを入力する”furigana”という項目を作ります。
furiganaという項目には、フリーのテキストが入るとします。
ここでは、ユーザー情報のアップデート・編集までを紹介します。

  • /modules/user/class/users.php

function UserUsersObject()内に下記のように付け加えます。

 $this->initVar('furigana', XOBJ_DTYPE_STRING, '', false);
  • /modules/user/forms/EditUserForm.class.php

function prepare() 内に下記のように付け加えます。

 $this->mFormProperties['furigana'] =& new XCube_StringProperty('furigana');
  • 同じファイルのfunction load() 内に下記のように付け加えます。
 $this->set('furigana', $obj->get('furigana'));
  • 同じファイルのfunction update() 内に下記のように付け加えます。
 $obj->set('furigana', $this->get('furigana'));

これで、ユーザー情報の編集時に、すでに入っている情報が入るようになります。(デフォルトのvalueの値)

管理画面を編集する場合は、同様に

 /modules/user/admin/forms/UserAdminEditForm.class.php

などを編集します。

Xoops を使った会員制サイトの構築はこちら

Xoops 管理画面のリダイレクトのメッセージを変更

Xoops

Xoops 管理画面のリダイレクトのメッセージを変更

XOOPS Cube Legacy 2.1.8

管理画面で、何か変更などを行ったときに短い時間表示されるページを編集する方法です。

includes/functions.phpの

 function redirect_header

以下にあるhtmlのコンテンツが、管理画面のメッセージです。
これを編集しましょう。

Xoops フォーラムが見れない

Xoops

Xoops フォーラムが見れない

Xoopsのフォーラムが見れないという場合、次を試してみましょう。

  1. Altsysのブロック設定が適切か確認(当たり前かもしれませんが)
  2. フォーラム>カテゴリ権限設定>にて、カテゴリごとにユーザーグループの権限設定ができます。プルダウンから、カテゴリを選択して、「送信」をクリックして、ユーザーグループのアクセスを設定する必要があります。ここで、見せたいユーザーにチェックがついていないと、見せたいユーザーに見せることができません。

Xoops 管理画面のユーザー検索をカスタマイズ

Xoops

Xoops 管理画面のユーザー検索フォームに好きな項目を追加する

Xoops Cube Legacy-2.1.x

Xoopsのユーザー情報設定は硬直的で、追加したり減らしたりが難しいです。
ICQ、AIM、YIMなどのいらない情報をHTMLテンプレート上で消すことは簡単ですが、項目を追加するとなるとひと手間かかります。
ここでは、管理画面のユーザー検索に、自分の好きな項目を追加して検索する方法を記載します。

ユーザー項目の追加自体は

Xoops ユーザー情報をカスタマイズする
Xoops ユーザー情報をカスタマイズする2
Xoops ユーザー情報をカスタマイズする3

の手順を実行して、終わっているものとします。

注意:下記の手順はソースコードのHackになります。バックアップを取って自己責任で行ってください。

例では、invitationという項目を作ります。
invitationという項目には、”invited”と”no_invited”の2種類のテキストが入るとします。

/modules/user/admin/forms/UserSearchFilterForm.class.php
を編集

 
 //最初の方の定数を決めるところに
 define('USER_SORT_KEY_USER_INVITATION', 32);
 //下記の$mSortKeysの最後にinvitationを追加
  var $mSortKeys = array(
 		USER_SORT_KEY_UID => 'u.uid',
        //中略
 		USER_SORT_KEY_USER_MAILOK => 'u.user_mailok',
 		USER_SORT_KEY_USER_CLEARANCE => 'invitation'
 		);

 

 //var $_mMatchFieldsに invitationを追加
    var $_mMatchFields = array ("uname", (中略) "user_intrest","invitation");

/modules/user/admin/forms/UserSearchForm.class.php 内に下記を追加

 $this->mFormProperties['invitation'] =& new XCube_StringProperty('invitation');

/modules/user/admin/templates/user_search.html にて管理画面のテンプレートを修正、invitationが検索できるようにする

 <!--フォーム内に追加-->
 <tr>
     <td class="head">招待会員か、非招待会員か</td>
      <td class="<{cycle values="odd,even"}>">
        <label><{xoops_input type=radio name=invitation value=invited}>
             招待会員</label><br />
        <label><{xoops_input type=radio name=invitation value=not_invited}>
             非招待会員</label><br />
      </td>
    </tr>

Xoops を使った会員制サイトの構築はこちら