!!!ログインユーザ情報の取得 XOOPS自身は、ログインしたときのユーザ情報をセッション(xoopsデータベース上の「xoops_session」テーブル)として保持しています。 ですが、このユーザ情報はグローバルなクラス「'''$xoopsUser'''」より 取得することができるようになっています。 以降、プログラムソースであるPHPファイル内での記述となります。 必ずPHPファイルの先頭で「require('header.php');」のように 「header.php」(../../mainfile.php)を呼んだ後に下記のユーザ判定を 行うようにしてください。 !!ユーザがログインしているかどうかの判定 if(empty($xoopsUser)) { // ログインされていない } 「$xoopsUser」が存在しない場合、これはログインすらしていない、ということになります。 ただし、モジュールを普通にインストールした状態では モジュールを呼び出した段階で XOOPSシステム自身がエラーメッセージを出してアクセス拒否を行います。 これを回避するには、システム管理の「グループ管理」にて「ゲスト」ユーザに対象のモジュールにアクセスする権限を与えてあげる必要があります。 {{ref_image xoops_img_20051108.png}} 例えば、ログインしていないときにXOOPSトップページに強制的に戻したい場合は、 以下のようにします。 if(empty($xoopsUser)) { // ログインされていない場合 include_once(XOOPS_ROOT_PATH.'/index.php'); exit(); } 「include_once(XOOPS_ROOT_PATH.'/index.php');」にて、 http://www.xx.yy.zz/xoops/index.php のようなトップページに飛ばしています。 '''XOOPS_ROOT_PATH'''は、XOOPSのルートのURLのdefine定義です(末尾に「/」を含みません)。 !!ユーザ名・ユーザIDの取得 $uname = ''; &uid = 0; if(!empty($xoopsUser)) { // ユーザがログインしている // ユーザ名の取得 $uname = $xoopsUser->getVar('uname'); if($uname == '') { $uname = $xoopsUser->getVar('name'); } // ユーザIDの取得 $uid = $xoopsUser->getVar('uid'); } 「$xoopsUser」が存在する場合に、「$xoopsUser->getVar('xxxx');」にて ログインしているユーザの情報を取得します。 $xoopsUser->getVarは、実際はxoopsデータベースのテーブル「xoops_users」内の カラム名を指定することで、そのパラメータを取得してきています。 MySQLのコマンドラインにて、SQL文にて select uname from xoops_users where uid=ログインしたユーザのID; のようにしたときに取れる値ですね。 select uname from xoops_users where uid=1; MySQLのコマンドラインにて上記のようにすると、 XOOPSシステム管理者のユーザ名が表示されることになります。 PHPソース内で $uname = $xoopsUser->getVar('uname'); とすると、$unameにxoops_usersテーブル内の「uname」カラムの値が入ります。 つまり、ログインユーザの本名が入ります。 $uname = $xoopsUser->getVar('name'); にて、ログインユーザ名を取得しています。上記プログラムでは、 ログインしたユーザの本名が存在しなければ、ログインユーザ名を$unameに入れるようにしています。 $uid = $xoopsUser->getVar('uid'); にて、ログインしたユーザのIDを取得します。実際のユーザ判別時には このユーザIDをキーにすることが多いかと思います。 !!ログインしているユーザの所属グループを取得 XOOPSでは、ログインした一ユーザに対して複数のアクセス権限を持たせることが できます。このアクセス権限は「グループ」として管理されており、 「システム管理」の「グループ管理」にて「'''グループに所属するユーザ'''」を追加 することができます(このへん、インターフェースが少し悪いなぁ。逆に「ユーザ管理」で'''ユーザが所属するグループ'''を変えることもできます)。 PHPソースでは、以下のようにしてログインユーザが所属するグループを取得してくる ことができます。 // ログインユーザIDの取得 $uid = $xoopsUser->getVar('uid'); // ログインユーザが所属するグループ情報の取得 $member_handler =& xoops_gethandler('member'); $User = new xoopsUser($uid); $user_groups = $User->getGroups(); $cou = count($user_groups); // 所属しているグループの数 for($i = 0; $i < $cou; $i++) { $thisGroup =& $member_handler->getGroup($user_groups[$i]); $gid = $thisGroup->getVar('groupid'); // グループIDの取得 $gname = $thisGroup->getVar('name'); // グループ名の取得 } 実際のデータベース上では、「xoops_groups_users_link」テーブルよりグループIDとユーザIDの結びつきの情報が格納されています(カラムgroupid/uid)。 このテーブルからuidに対応するgroupidを抜き出して、 「xoops_groups」テーブル内の検索groupdidと一致するnameを取り出すと、それが グループ名になっています。 デフォルトで指定可能なグループは以下のようになっています(グループ管理にて グループ自身を新設することも可能です。その場合、グループIDは4以降がつけられます)。 ,グループID,グループ名 ,1,サイト管理者 ,2,登録ユーザ ,3,ゲスト ログインしたユーザのグループ情報が取得できれば、 グループにより表示内容や入力内容を分岐させる、ということもできますね。 !!サンプルモジュールのダウンロード 上記のユーザ情報を表示するサンプル「GetUserInfoModule」を置いておきました。 参考までにご利用くださいませ。 {{ref xoops_GetUserInfoModule_20051108.zip}}