[1071]XOOPS模組開發
一、 安裝、更新及移除模組時的自動功能
- 主要是用來設定在安裝、更 新、反安裝模組時,要自動進行的一些指定動作,非必須。
- 先將xoops_version.php的自動功能打開,並確定好路徑檔名。 $modversion['onInstall'] = "include/onInstall.php"; $modversion['onUpdate'] = "include/onUpdate.php"; $modversion['onUninstall'] = "include/onUninstall.php";
- 依序編輯 onInstall.php 等檔案
- onInstall 是安裝時要執行的程式。執行函數為「xoops_module_install_模組目錄 」
- onUninstall 是移除時要執行的程式。函數為「xoops_module_uninstall_模組目錄」
- onUpdate 是更新時要執行的程式。檔執行函數為「 xoops_module_update_模組目錄」
- XOOPS的權限判斷一律以「群組」為判斷基礎,一個人可以同時隸屬多個群組。
- 一個人的所有權限,就是其所屬群組所有權限的集合。基本群組有:管理員、會員、訪客
- 群組是XOOPS判斷權限的主要依據,可讓程式自動建立之(建議放在onInstall.php): $member_handler = xoops_gethandler('member'); $group = $member_handler->createGroup(); $group->setVar("name", $群組名稱); $group->setVar("description", $群組說明); $member_handler->insertGroup($group);
- 亦可自己寫新增函數(可判斷是否群組已經存在) function mk_group($name=""){ global $xoopsDB; $sql = "select groupid from ".$xoopsDB->prefix("groups")." where `name`='$name'"; $result=$xoopsDB->query($sql) or web_error($sql); list($groupid)=$xoopsDB->fetchRow($result); if(empty($groupid)){ $sql = "insert into ".$xoopsDB->prefix("groups")." (`name`) values('{$name}')"; $xoopsDB->queryF($sql) or web_error($sql); //取得最後新增資料的流水編號 $groupid=$xoopsDB->getInsertId(); } return $groupid; }
- 在許多時候,一個系統是需要多人管理的但又不希望每個人都可以到後台,那麼在設定好群組及權限的情況下,就可以把功能搬到前台來。
- 修改連結,把新增和修改都從admin/main.php改到index.php,搬移函數和流程到index.php,修正流程的轉向,這樣就差不多了。
- 基本的權限有四種,各個模組可自行視需求在模組中新增權限項目:
- (1) 系統管理權限:通常只開放給管理員,擁有整個XOOPS系統生殺大權。
- (2) 模組管理權限:某模組的管理權限,一般也只開給管理者,偶爾開給協助的管理人。
- (3) 模組使用權限:某模組的使用權限,會開放給所有群組,否則有些模組將無法使用。
- (4) 區塊使用權限:某區塊的使用權限,會開放給所有群組,否則有些區塊將看不到。
- 這四種權限,均紀錄在group_permission這個資料表:「system_admin」就是「系統管理權」;「module_read」就是「模組的使用權」;「module_admin」就是「模組的管理權」;「block_read」就是「區塊的使用權」
- 將main.php改為(記得修改$item_list的權限名稱,若只有一種,可留一個即可): <?php include_once "header.php"; include_once XOOPS_ROOT_PATH . '/class/xoopsform/grouppermform.php'; //權限項目陣列(編號超級重要!設定後,以後切勿隨便亂改。) $item_list = array( '1' => "權限一", '2' => "權限二", ); $mid = $xoopsModule->mid(); $perm_name = $xoopsModule->dirname(); $formi = new XoopsGroupPermForm('細部權限設定', $mid, $perm_name, '請勾選欲開放給群組使用的權限:<br>'); foreach ($item_list as $item_id => $item_name) { $formi->addItem($item_id, $item_name); } echo $formi->render(); include_once 'footer.php';
- 儲存成功後,即可在group_permission資料表看到一筆資料,其中gperm_groupid是群組編號,gperm_itemid則是「$item_list」中的「權限項目編號」,gperm_modid是模組編號,gperm_name是自訂的「$perm_name」名稱。
- 將以下語法套用至需要判斷權限的地方: if(power_chk($perm_name = "", $sn = "")){ //若有權限要做的動作 }
- power_chk()是tadtools提供的函數,只要給名稱(也可以空值)及權限編號(必要)即可判斷目前登入者有無權限。也可以判斷無權限就直接轉向。 if (!power_chk('', 1)) { redirect_header('index.php', 3, '無操作權限'); }
- 可先啟用XOOPS的搜尋區塊,或直接用網址:「http://網址/search.php」來搜尋。
- 修改include/search.php,並根據提示修改之即可。
- 圖示請準備24x24的圖示,並存到images下。https://www.flaticon.com
- 在xoops_version.php中加入搜尋設定(記得更新模組): $modversion['hasSearch'] = 1; $modversion['search']['file'] = "include/search.php"; $modversion['search']['func'] = "snews_search";
- 若有一些和模組部份功能的設定要讓站長調整,那可直接使用偏好設定。
- 模組若需要偏好設定功能,那麼請加入以下項目(在此常數需要加上引號才正常!): $modversion['config'][$i]['name'] = 'show_num'; $modversion['config'][$i]['title'] = '_MI_SNEWS_SHOW_NUM'; $modversion['config'][$i]['description'] = '_MI_SNEWS_SHOW_NUM_DESC'; $modversion['config'][$i]['formtype'] = 'select'; $modversion['config'][$i]['valuetype'] = 'int'; $modversion['config'][$i]['options'] = array('3篇' => 3, '6篇' => 6, '9篇' => 9); $modversion['config'][$i]['default'] = 6;
- 記得加入語系到modinfo.php define('_MI_SNEWS_SHOW_NUM', '每頁顯示文章數'); define('_MI_SNEWS_SHOW_NUM_DESC', '設定每頁顯示文章數(分頁用)');
- 輸入欄位類型其可用的項目有:
- (1) 「yesno」是否的單選框、「textbox」文字框、「password」密碼框、「color」顏色框、「hidden」隱藏框、「textarea」大量文字框
- (2) 「select」下拉選單、「select_multi」可複選的下拉選單
- (3) 「theme」佈景選單、「theme_multi」可複選的佈景選單
- (4) 「group」群組選單、「group_multi」可複選的群組選單
- (5) 「user」已註冊使用者選單、「user_multi」可複選的已註冊使用者選單
- (6) 「tplset」樣板選單、「cpanel」後台選單、「timezone」時區選單、「language」語系選單、「startpage」首頁模組選單、「module_cache」模組快取時間選單、「site_cache」網站快取時間選單
- 偏好設定的輸入值型態,其可用的項目有:
- (1) 「int」整數: yesno 、group、user
- (2) 「float」浮點數
- (3) 「text」一般文字
- (4) 「textarea」大量文字
- (5) 「array」陣列: select_multi、group_multi、 user_multi...等
- 偏好設定的選項設定使用陣列寫法,用於有 select 或 select_multi 時,「'3 篇' => 3」左邊的3 篇(索引)會顯示在螢幕上,可用文字,右邊的3(值)會存入資料庫。
- 在模組中套用時,直接用以下方式即可取得偏好設定值: $xoopsModuleConfig['設定名稱']
- 例如分頁可以改成這樣(記得global $xoopsModuleConfig): $PageBar = getPageBar($sql, $xoopsModuleConfig['show_num'], 10);
- 若要在區塊中(或別的模組)取得某個模組的偏好設定
$modhandler = xoops_gethandler('module');
$xoopsModule = $modhandler->getByDirname("模組目錄");
$config_handler =xoops_gethandler('config');
$xoopsModuleConfig = $config_handler->getConfigsByCat(0, $xoopsModule->mid());