:::

9-2 index() 顯示所有資料的物件方法

  1. 用來產生所有投稿主題資料頁面需用到物件方法是 class/Submission.php 中的 index(),其預設內容如下:
    //列出所有 submission 資料 Submission::index()
    public static function index($where_arr = [], $other_arr = [], $view_cols = [], $order_arr = [], $amount = '')
    {
        global $xoopsTpl, $xoTheme;
    
        if ($amount) {
            list($all_submission, $total, $bar) = self::get_all($where_arr, $other_arr, $view_cols, $order_arr, null, null, 'read', $amount);
            $xoopsTpl->assign('bar', $bar);
            $xoopsTpl->assign('total', $total);
        } else {
            $all_submission = self::get_all($where_arr, $other_arr, $view_cols, $order_arr);
        }
    
        $xoopsTpl->assign('all_submission', $all_submission);
        Utility::test($all_submission, 'all_submission');
    
        //刪除確認的JS
        $SweetAlert = new SweetAlert();
        $SweetAlert->render('submission_destroy_func', "{$_SERVER['PHP_SELF']}?op=submission_destroy&id=", "id");
    
        BootstrapTable::render();
    }
  2. 傳入的參數預設有五個:
    1. $where_arr = [] 就是篩選資料用的,陣列格式,會用 and 串接
      1. 若內容為 ['id' => 1],SQL語法便會轉換為 WHERE 1 AND `id` = '1'
      2. 若內容為 ['start > NOW()', 'end < NOW()'],SQL語法便會轉換為 WHERE 1 AND start > NOW() and end < NOW()
      3. 若內容為 ['NOW() BETWEEN start AND end'],SQL語法便會轉換為 WHERE 1 AND NOW() BETWEEN start AND end
    2. $other_arr = [] 用來作為彈性擴增,晚點若有用到再說
    3. $view_cols 用來指定只要抓取指定欄位,例如 ['id', 'title'] 代表只要編號和標題兩個欄位值,空值代表所有欄位都要。
    4. $order_arr 用來設定排序規則
      1. 若內容為 ['start'] 表示根據 start 欄位由小到大來排序,SQL語法等同 ORDER BY start ASC
      2. 若內容為 ['create_time' => 'DESC'] 表示根據 create_time 欄位由大到小來排序,SQL語法等同 ORDER BY create_time DESC
      3. 若內容為 ['uid', 'create_time' => 'DESC'] 表示先根據 uid 欄位由小到大排序,同樣大小再根據 create_time 欄位由大到小來排序,SQL語法等同 ORDER BY uid ASC,  create_time DESC
    5. $amount 若有值,例如:20,表示要分頁,且每頁20筆資料。
  3. 接著開始根據傳入的條件來抓資料
    if ($amount) {
        list($all_submission, $total, $bar) = self::get_all($where_arr, $other_arr, $view_cols, $order_arr, null, null, 'read', $amount);
        $xoopsTpl->assign('bar', $bar);
        $xoopsTpl->assign('total', $total);
    } else {
        $all_submission = self::get_all($where_arr, $other_arr, $view_cols, $order_arr);
    }
    1. 若是有 $amount 分頁數,那會額外產生 $bar(分頁工具列)及 $total(所有資料總數) 兩個變數。
    2. 我們用 self::get_all() 來擷取所有資料並將值放入 $all_submission
  4. 接著用 $xoopsTpl->assign() 將 $all_submission 送到樣板:
    $xoopsTpl->assign('all_submission', $all_submission);
    Utility::test($all_submission, 'all_submission');
  5. Utility::test('值', '關鍵字') 是一個測試工具,在網址加入測試關鍵字「test=all_submission」,就可以觀察其取得的值:
    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. 最後則是要呼叫最重要的BootstrapTable,所以,我們呼叫 BootstrapTable 來套用之
    use XoopsModules\Tadtools\BootstrapTable;
  8. 只要一行就行,剩下的在剛剛的樣板都已經設定好了
    BootstrapTable::render();
  9. 自己補上:
    $fancybox = new FancyBox('.fancybox_submission_id');
    $fancybox->render();

    上方也別忘了加上:

    use XoopsModules\Tadtools\FancyBox;

     

  10. 最後,修改一下 get_all(),在while迴圈中,將時間轉換為時間戳記,以在樣板中判斷是否過期或未開放報名
    //將 uid 編號轉換成使用者姓名(或帳號)
    $data['uid_name'] = Utility::get_name_by_uid($data['uid']);
    
    $data = Tools::filter_all_data($filter, $data, self::$filter_arr);
    
    // 加入時間戳記
    $data['start_ts'] = strtotime($data['start']);
    $data['end_ts']   = strtotime($data['end']);
    $data['now']      = time();

     

 

 


:::

書籍目錄

展開 | 闔起

快速登入


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

計數器

今天: 812812812
昨天: 1856185618561856
總計: 8776736877673687767368776736877673687767368776736