:::

6-2 show() 顯示某筆資料的物件方法

  1. 用來產生單一頁面需用到物件方法是: show(),其預設內容如下:
    //以流水號秀出某筆 submission 資料內容 Submission::show()
    public static function show($where_arr = [], $other_arr = [], $mode = '')
    {
        global $xoopsTpl;
    
        if (empty($where_arr)) {
            redirect_header($_SERVER['HTTP_REFERER'], 3, "無查詢條件:" . __FILE__ . __LINE__);
        }
    
        $all = self::get($where_arr, $other_arr);
        if (empty($all)) {
            return false;
        }
    
        foreach ($all as $key => $value) {
            $value     = Tools::filter($key, $value, 'read', self::$filter_arr);
            $all[$key] = $value;
            $$key      = $value;
        }
    
        //將 uid 編號轉換成使用者姓名(或帳號)
        $uid_name = Utility::get_name_by_uid($uid);
        $xoopsTpl->assign('uid_name', $uid_name);
    
        $SweetAlert = new SweetAlert();
        $SweetAlert->render('submission_destroy_func', "{$_SERVER['PHP_SELF']}?op=submission_destroy&id=", "id");
    
        if ($mode == "return") {
            return $all;
        } elseif ($mode == "assign_all") {
            $xoopsTpl->assign('submission', $all);
        } else {
            foreach ($all as $key => $value) {
                $xoopsTpl->assign($key, $value);
            }
        }
    }
  2. 傳入的參數預設有三個:
    1. $where_arr = [] 就是篩選資料用的,陣列格式,會用 and 串接
      1. 若內容為 ['id' => 1],SQL語法便會轉換為 WHERE 1 AND `id` = '1'
      2. 若內容為 ['start > NOW()', 'end < NOW()'],SQL語法便會轉換為 WHERE1 AND start > NOW() and end < NOW()
      3. 若內容為 ['NOW() BETWEEN start AND end'],SQL語法便會轉換為 WHERE1 AND NOW() BETWEEN start AND end
    2. $other_arr = [] 用來作為彈性擴增,晚點若有用到再說
    3. $mode 的值若為 return,則會傳回值,而非直接 assign到樣板。
  3. 接著開始根據傳入的條件來抓資料,並且在資料送到樣板或傳回前,將資料先做過濾,避免如XSS等攻擊。
    if (empty($where_arr)) {
        redirect_header($_SERVER['HTTP_REFERER'], 3, "無查詢條件:" . __FILE__ . __LINE__);
    }
    
    $all = self::get($where_arr, $other_arr);
    if (empty($all)) {
        return false;
    }
    
    foreach ($all as $key => $value) {
        $value     = Tools::filter($key, $value, 'read', self::$filter_arr);
        $all[$key] = $value;
        $$key      = $value;
    }
    1. $where_arr若是沒有值,會顯示無查詢條件,並回到上頁($_SERVER['HTTP_REFERER']),redirect_header() 則是XOOPS內建的轉向函數
    2. 我們用 self::get($where_arr, $other_arr) 來擷取單一筆資料並將值放入 $all,若 $all 沒資料就直接傳回空值。
    3. 若是有 $all 資料,則依序用 Tools::filter() 來過濾變數,並存回  $all 中,順便重製出各個欄位的變數值,例如: $id$start$end....等
  4. 由於有uid欄位,所以,我們用 Utility::get_name_by_uid($uid) 來擷取此使用者的姓名,並且用 $xoopsTpl->assign() 送到樣板:
    //將 uid 編號轉換成使用者姓名(或帳號)
    $uid_name = Utility::get_name_by_uid($uid);
    $xoopsTpl->assign('uid_name', $uid_name);
  5. 最後看起來像這樣
    img
  6. 由於有刪除按鈕,所以,我們呼叫 SweetAlert 來做刪除確認
    use XoopsModules\Tadtools\SweetAlert;

    render() 需要三個參數,第一個是javascript的呼叫名稱,第二個參數就是要執行刪除的網址,第三個參數則是根據哪個欄位值來刪除。SweetAlert 詳細用法可以看這裡link to https://github.com/tad0616/tadtools/blob/master/class/FormValidator.php _blank

    $SweetAlert = new SweetAlert();
    $SweetAlert->render('submission_destroy_func', "{$_SERVER['PHP_SELF']}?op=submission_destroy&id=", "id");
  7. 最後則是根據 $mode 來決定是要傳回還是送至樣板
    if ($mode == "return") {
        return $all;
    } elseif ($mode == "assign_all") {
        $xoopsTpl->assign('submission', $all);
    } else {
        foreach ($all as $key => $value) {
            $xoopsTpl->assign($key, $value);
        }
    }
    1. 若是 $mode 的值若為 return,則會傳整個 $all 陣列
    2. 若是 $mode 的值若為 assign_all,則會將整個 $all 陣列傳到樣板
    3. 若是 $mode 的不是上述兩種,則會依序將 $all 陣列拆解成單一變數,然後依序傳到樣板(這是預設)

 


:::

書籍目錄

展開 | 闔起

快速登入


https%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbdsn%3D2076%26tbsn%3D56

計數器

今天: 810810810
昨天: 1856185618561856
總計: 8776734877673487767348776734877673487767348776734