:::

5. 自動生成群組並做權限判斷

一、 安裝、更新及移除模組時的自動功能

  1. 主要是用來設定在安裝、更 新、反安裝模組時,要自動進行的一些指定動作,非必須。
  2. 先將xoops_version.php的自動功能打開,並確定好路徑檔名。
    $modversion['onInstall']   = "include/onInstall.php";
    $modversion['onUpdate']    = "include/onUpdate.php";
    $modversion['onUninstall'] = "include/onUninstall.php";
  3. 依序編輯 onInstall.php 等檔案
  4. onInstall 是安裝時要執行的程式。執行函數為「xoops_module_install_模組目錄
  5. onUninstall 是移除時要執行的程式。函數為「xoops_module_uninstall_模組目錄
  6. onUpdate 是更新時要執行的程式。檔執行函數為「 xoops_module_update_模組目錄

二、 自動建立群組

  1. XOOPS的權限判斷一律以「群組」為判斷基礎,一個人可以同時隸屬多個群組。
  2. 一個人的所有權限,就是其所屬群組所有權限的集合。基本群組有:管理員、會員、訪客
  3. 群組是XOOPS判斷權限的主要依據,可讓程式自動建立之(建議放在onInstall.php):
    $member_handler = xoops_gethandler('member');
    $group = $member_handler->createGroup();
    $group->setVar("name", $群組名稱);
    $group->setVar("description", $群組說明);
    $member_handler->insertGroup($group);
  4. 亦可自己寫新增函數(可判斷是否群組已經存在)
    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;
    }

三、 把各種管理功能搬到前台

  1. 在許多時候,一個系統是需要多人管理的但又不希望每個人都可以到後台,那麼在設定好群組及權限的情況下,就可以把功能搬到前台來。
  2. 修改連結,把新增和修改都從admin/main.php改到index.php,搬移函數和流程到index.php,修正流程的轉向,這樣就差不多了。

四、  XOOPS權限與群組

  1. 基本的權限有四種,各個模組可自行視需求在模組中新增權限項目:
    • (1) 系統管理權限:通常只開放給管理員,擁有整個XOOPS系統生殺大權。
    • (2) 模組管理權限:某模組的管理權限,一般也只開給管理者,偶爾開給協助的管理人。
    • (3) 模組使用權限:某模組的使用權限,會開放給所有群組,否則有些模組將無法使用。
    • (4) 區塊使用權限:某區塊的使用權限,會開放給所有群組,否則有些區塊將看不到。
  2. 這四種權限,均紀錄在group_permission這個資料表:「system_admin」就是「系統管理權」;「module_read」就是「模組的使用權」;「module_admin」就是「模組的管理權」;「block_read」就是「區塊的使用權」

五、 加入權限設定頁面

  1. 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';
  2. 儲存成功後,即可在group_permission資料表看到一筆資料,其中gperm_groupid是群組編號,gperm_itemid則是「$item_list」中的「權限項目編號」,gperm_modid是模組編號,gperm_name是自訂的「$perm_name」名稱。

六、 套用權限

  1. 將以下語法套用至需要判斷權限的地方:
    if(power_chk($perm_name = "", $sn = "")){
      //若有權限要做的動作
    }
  2. power_chk()是tadtools提供的函數,只要給名稱(也可以空值)及權限編號(必要)即可判斷目前登入者有無權限。也可以判斷無權限就直接轉向。
    if (!power_chk('', 1)) {
        redirect_header('index.php', 3, '無操作權限');
    }

七、 加入搜尋功能

  1. 可先啟用XOOPS的搜尋區塊,或直接用網址:「http://網址/search.php」來搜尋。
  2. 修改include/search.php,並根據提示修改之即可。
  3. 圖示請準備24x24的圖示,並存到images下。https://www.flaticon.com
  4. 在xoops_version.php中加入搜尋設定(記得更新模組):
    $modversion['hasSearch']      = 1;
    $modversion['search']['file'] = "include/search.php";
    $modversion['search']['func'] = "snews_search";

八、 加入偏好設定

  1. 若有一些和模組部份功能的設定要讓站長調整,那可直接使用偏好設定。
  2. 模組若需要偏好設定功能,那麼請加入以下項目(在此常數需要加上引號才正常!):
    $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;
  3. 記得加入語系到modinfo.php
    define('_MI_SNEWS_SHOW_NUM', '每頁顯示文章數');
    define('_MI_SNEWS_SHOW_NUM_DESC', '設定每頁顯示文章數(分頁用)');
  4. 輸入欄位類型其可用的項目有:
    • (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」網站快取時間選單
  5. 偏好設定的輸入值型態,其可用的項目有:
    • (1) 「int」整數: yesno 、group、user
    • (2) 「float」浮點數
    • (3) 「text」一般文字
    • (4) 「textarea」大量文字
    • (5) 「array」陣列: select_multi、group_multi、 user_multi...等
  6. 偏好設定的選項設定使用陣列寫法,用於有 select select_multi 時,「'3 篇' => 3」左邊的3 篇(索引)會顯示在螢幕上,可用文字,右邊的3(值)會存入資料庫。

九、 取得偏好設定值

  1. 在模組中套用時,直接用以下方式即可取得偏好設定值:
    $xoopsModuleConfig['設定名稱']
  2. 例如分頁可以改成這樣(記得global $xoopsModuleConfig):
    $PageBar = getPageBar($sql, $xoopsModuleConfig['show_num'], 10);
  3. 若要在區塊中(或別的模組)取得某個模組的偏好設定
    $modhandler = xoops_gethandler('module');
    $xoopsModule = $modhandler->getByDirname("模組目錄");
    $config_handler =xoops_gethandler('config');
    $xoopsModuleConfig = $config_handler->getConfigsByCat(0, $xoopsModule->mid());

     


:::

搜尋

QR Code 區塊

https%3A%2F%2Fwww.tad0616.net%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbsn%3D44%26tbdsn%3D1453

書籍目錄

展開 | 闔起

線上使用者

17人線上 (8人在瀏覽線上書籍)

會員: 0

訪客: 17

更多…