後台相片管理讀取緩慢問題
Closed this issue · 2 comments
geek01 commented
分類越多相片管理讀取越慢的問題出在下拉分類選單
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;
}
tadlearn commented
感謝,已更新上去。
查了一下源碼,Xmf\Request 確實沒有明確提到有支援SESSION變數
不過,寫個簡單程式去測試,發現其實也是有支援啊~
geek01 commented
之前也以為有支援SESSION變數,不過一直拿不到值,因此回頭去找xmf源碼Request.php,只有GET、POST、FILES、COOKIE、ENV和SERVER,不指定的話預設用REQUEST,剛測試是取COOKIE值沒問題,但取不到SESSION值.....