:::
主內容區域
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"; }
3-2 修改 interface.php