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);
}
}
}
$where_arr = []
就是篩選資料用的,陣列格式,會用 and
串接
['id' => 1]
,SQL語法便會轉換為 WHERE 1 AND `id` = '1'
['start > NOW()', 'end < NOW()']
,SQL語法便會轉換為 WHERE1 AND start > NOW() and end < NOW()
['NOW() BETWEEN start AND end']
,SQL語法便會轉換為 WHERE1 AND NOW() BETWEEN start AND end
$other_arr = []
用來作為彈性擴增,晚點若有用到再說$mode
的值若為 return
,則會傳回值,而非直接 assign到樣板。
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;
}
$where_arr
若是沒有值,會顯示無查詢條件,並回到上頁($_SERVER['HTTP_REFERER']
),redirect_header()
則是XOOPS內建的轉向函數 self::get($where_arr, $other_arr)
來擷取單一筆資料並將值放入 $all
,若 $all
沒資料就直接傳回空值。$all
資料,則依序用 Tools::filter()
來過濾變數,並存回 $all
中,順便重製出各個欄位的變數值,例如: $id
、$start
、$end
....等Utility::get_name_by_uid($uid)
來擷取此使用者的姓名,並且用 $xoopsTpl->assign()
送到樣板:
//將 uid 編號轉換成使用者姓名(或帳號)
$uid_name = Utility::get_name_by_uid($uid);
$xoopsTpl->assign('uid_name', $uid_name);
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");
$mode
來決定是要傳回還是送至樣板
if ($mode == "return") {
return $all;
} elseif ($mode == "assign_all") {
$xoopsTpl->assign('submission', $all);
} else {
foreach ($all as $key => $value) {
$xoopsTpl->assign($key, $value);
}
}
$mode
的值若為 return
,則會傳整個 $all
陣列$mode
的值若為 assign_all
,則會將整個 $all
陣列傳到樣板$mode
的不是上述兩種,則會依序將 $all
陣列拆解成單一變數,然後依序傳到樣板(這是預設)