3-3
用 Tools::get_session() 來記住登入者身份
class/Tools.php
是該模組的一個常用共同物件,取代早期的 function.php 共同函數檔
- 要使用裡面的物件方法(函數),可以直接使用以下方式來呼叫
XoopsModules\Submission\Tools::get_session();
不過,這樣實在太長了,為了簡短,可以在程式上方加入:
use XoopsModules\Submission\Tools;
如此,便可用以下的方式來呼叫物件方法
Tools::get_session();
get_session()
主要用來判斷登入者身份,若有其他額外身份,可以在此修改,這部份晚點會講到。
//取得session
public static function get_session()
{
global $xoopsUser;
//判斷是否對該模組有管理權限
if (!isset($_SESSION['submission_adm'])) {
$_SESSION['submission_adm'] = isset($xoopsUser) && \is_object($xoopsUser) ? $xoopsUser->isAdmin() : false;
}
if (!isset($_SESSION['now_user'])) {
$_SESSION['now_user'] = ($xoopsUser) ? $xoopsUser->toArray() : [];
}
if ($_SESSION['now_user']) {
if (!isset($_SESSION['SchoolCode'])) {
if ($_REQUEST['SchoolCode']) {
$_SESSION['SchoolCode'] = Request::getString('SchoolCode');
} else {
$_SESSION['SchoolCode'] = ($xoopsUser) ? $xoopsUser->user_intrest() : false;
}
}
}
}
- 目前只要知道,該方法會產生數個session紀錄:
$_SESSION['submission_adm']
是紀錄該操作者是否有此模組管理權限
$_SESSION['now_user']
則是目前操作的的詳細資訊,包括姓名、Email等各種資訊
$_SESSION['SchoolCode']
是紀錄該操作者的學校代碼(若有的話)
- 其他模組也可能會有
$_SESSION['now_user']
及 $_SESSION['SchoolCode']
,如果已經有,則不再重複紀錄。
- 若是想看看有哪些 session 內容,可以用以下方式來傾印出所有值:
// 程式上方若沒有這行,記得加上才能使用
use XoopsModules\Tadtools\Utility;
Utility::dd($_SESSION);
- 若模組已經在運作中,不想影響他人,則可以用此方式,並於網址列最後多個
test
參數,如:「index.php?test=session
」:
Utility::test($_SESSION, 'session', 'dd');
便可看見完整資訊(chrome可以安裝 JSON Viewer 套件,會有相同效果):

- 最後,請將可以發布投稿主題的選項,現階段判斷只有管理員才顯示:
if ($_SESSION['submission_adm']) {
$interface_menu[_MD_SUBMISSION_SETUP] = "setup.php";
$interface_icon[_MD_SUBMISSION_SETUP] = "fa-file-circle-plus";
}
- 推薦作法:
if (Tools::chk_is_adm('', '', __FILE__, __LINE__, 'return')) {
$interface_menu[_MD_SUBMISSION_SETUP] = "setup.php";
$interface_icon[_MD_SUBMISSION_SETUP] = "fa-file-circle-plus";
}