:::
主內容區域
9-2 index() 顯示所有資料的物件方法
- 用來產生所有投稿主題資料頁面需用到物件方法是
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(); } - 傳入的參數預設有五個:
$where_arr = []就是篩選資料用的,陣列格式,會用and串接- 若內容為
['id' => 1],SQL語法便會轉換為WHERE 1 AND `id` = '1' - 若內容為
['start > NOW()', 'end < NOW()'],SQL語法便會轉換為WHERE 1 AND start > NOW() and end < NOW() - 若內容為
['NOW() BETWEEN start AND end'],SQL語法便會轉換為WHERE 1 AND NOW() BETWEEN start AND end
- 若內容為
$other_arr = []用來作為彈性擴增,晚點若有用到再說$view_cols用來指定只要抓取指定欄位,例如['id', 'title']代表只要編號和標題兩個欄位值,空值代表所有欄位都要。$order_arr用來設定排序規則- 若內容為
['start']表示根據 start 欄位由小到大來排序,SQL語法等同ORDER BY start ASC - 若內容為
['create_time' => 'DESC']表示根據 create_time 欄位由大到小來排序,SQL語法等同ORDER BY create_time DESC - 若內容為
['uid', 'create_time' => 'DESC']表示先根據 uid 欄位由小到大排序,同樣大小再根據 create_time 欄位由大到小來排序,SQL語法等同ORDER BY uid ASC, create_time DESC
- 若內容為
$amount若有值,例如:20,表示要分頁,且每頁20筆資料。
- 接著開始根據傳入的條件來抓資料
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); }- 若是有
$amount分頁數,那會額外產生$bar(分頁工具列)及$total(所有資料總數) 兩個變數。 - 我們用
self::get_all()來擷取所有資料並將值放入$all_submission
- 若是有
- 接著用
$xoopsTpl->assign()將$all_submission送到樣板:$xoopsTpl->assign('all_submission', $all_submission); Utility::test($all_submission, 'all_submission'); Utility::test('值', '關鍵字')是一個測試工具,在網址加入測試關鍵字「test=all_submission」,就可以觀察其取得的值:

- 由於有刪除按鈕,所以,我們呼叫
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"); - 最後則是要呼叫最重要的BootstrapTable,所以,我們呼叫
BootstrapTable來套用之use XoopsModules\Tadtools\BootstrapTable; - 只要一行就行,剩下的在剛剛的樣板都已經設定好了
BootstrapTable::render(); - 自己補上:
$fancybox = new FancyBox('.fancybox_submission_id'); $fancybox->render();上方也別忘了加上:
use XoopsModules\Tadtools\FancyBox; - 最後,修改一下
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();
9-1 調整顯示所有投稿主題的界面