tad0616/tadgallery

後台相片管理讀取緩慢問題

Closed this issue · 2 comments

分類越多相片管理讀取越慢的問題出在下拉分類選單
sql檢索無窮分類選單效能太差,改用輸出全部資料陣列後再遞迴產出選單
另外發現Xmf\Request不支援SESSION變數
https://xoops.gitbook.io/xmf-cookbook/reference/request

//取得分類下拉選單
function get_tad_gallery_cate_option($of_csn = 0, $level = 0, $v = '', $chk_view = 1, $chk_up = 0, $this_csn = '', $no_self = '0')
{
    global $xoopsDB, $xoopsUser, $xoopsModule, $isAdmin;

    if ($xoopsUser) {
        $module_id = $xoopsModule->getVar('mid');
        $isAdmin = $xoopsUser->isAdmin($module_id);
    } else {
        $isAdmin = false;
    }

    $tadgallery = new Tadgallery();
    $show_uid = isset($_SESSION['show_uid']) ? (int) $_SESSION['show_uid'] : 0;
    if ($show_uid) {
        $tadgallery->set_show_uid($show_uid);
    }

    // if (\Xmf\Request::hasVar('gallery_list_mode', 'SESSION')) {
        $cate_count = $tadgallery->get_tad_gallery_cate_count($_SESSION['gallery_list_mode']);
    // }

    $sql = 'select csn, of_csn, title from ' . $xoopsDB->prefix('tad_gallery_cate') . " order by sort";
    $result = $xoopsDB->queryF($sql) or Utility::web_error($sql, __FILE__, __LINE__);

    $ok_cat = $ok_up_cat = '';

    if ($chk_view) {
        $ok_cat = $tadgallery::chk_cate_power();
    }

    if ($chk_up) {
        $ok_up_cat = $tadgallery::chk_cate_power('upload');
    }

    $data = [];
    $i = 0;
    while (list($csn, $of_csn, $title) = $xoopsDB->fetchRow($result)) {
        $csn = (int) $csn;

        if ($chk_view and is_array($ok_cat)) {
            if (!in_array($csn, $ok_cat)) {
                continue;
            }
        }

        if ($chk_up and is_array($ok_up_cat)) {
            if (!in_array($csn, $ok_up_cat)) {
                continue;
            }
        }
        if ('1' == $no_self and $this_csn == $csn) {
            continue;
        }

        $count = (empty($cate_count[$csn]['file'])) ? '' : " ({$cate_count[$csn]['file']})";
        $data[$i]['csn'] = $csn;
        $data[$i]['of_csn'] = $of_csn;
        $data[$i]['title'] = $title . $count;
        $i++;
    }

    $option = generate_option($data, 0, 0, $v);

    return $option;
}

//將陣列遞迴輸出
function generate_option($data, $csn, $level, $v = '')
{
    static $option;
    $level += 1;
    $syb = str_repeat("-", $level) . " ";
    $option .= ($csn) ? "" : "<option value='0'>" . _MD_TADGAL_CATE_SELECT . "</option>";
    foreach ($data as $key => $value) {
        if ($value['of_csn'] == $csn) {
            $selected = ($v == $csn) ? "selected" : "";
            $option .= "<option value='{$value['csn']}' $selected>{$syb}{$value['title']}</option>";
            generate_option($data, $value['csn'], $level);
        }
    }
    return $option;
}

感謝,已更新上去。
查了一下源碼,Xmf\Request 確實沒有明確提到有支援SESSION變數
不過,寫個簡單程式去測試,發現其實也是有支援啊~

之前也以為有支援SESSION變數,不過一直拿不到值,因此回頭去找xmf源碼Request.php,只有GET、POST、FILES、COOKIE、ENV和SERVER,不指定的話預設用REQUEST,剛測試是取COOKIE值沒問題,但取不到SESSION值.....