1. 安裝開發環境 1-1 幾個您要知道的位置 1-2 下載 XOOPS250ModuleConversionFiles 1-3 認識 xoops_version.php 1-4 logo製作 1-5 上課範例及需求 2. 資料庫規劃 2-1 完成資料庫部份設定 3. 後台界面設定 3-1 修改 admin/menu.php 3-2 後台管理頁面 main.php 3-3 後台管理主頁樣板 4. XOOPS內建表單Class 4-1 XOOPS表單物件的基本用法 4-2 將資料送至樣板呈現 4-3 各種XOOPS表單元件 4-4 加入 TinyMCE 編輯器 4-5 在內建表單元件加入額外設定 4-6 修改日曆元件 4-7 改用 CKEditor 編輯器 4-8 自動功能 4-9 完整表單函數 5. $xoopsDB資料庫物件 5-1 資料過濾檢查 5-2 $xoopsUser 使用者物件取得使用者資料 5-3 寫入資料庫 5-4 建立安全的表單 5-5 異常處理 6. 在前台頁面顯示 6-1 header.php 6-2 修改前台流程 6-3 從資料庫讀出單一資料 6-4 製作顯示單一活動頁面 6-5 陣列傳至Smarty樣板的用法 6-6 顯示列表 6-7 讀出資料的安全性過濾 6-8 過濾所有讀出的函數 6-9 加入模組工具列 7. 加入管理功能 7-1 編輯活動 7-2 更新活動 7-3 加入確認後刪除的機制 7-4 加入刪除功能 7-5 根據不同身份顯示不同內容 7-6 根據不同狀態顯示標籤 7-7 加入分頁功能 8. 加入報名按鈕 8-1 加入報名功能 8-2 報名過後的界面改變 8-3 取消報名 9. 新增區塊 9-1 編輯區塊主函數 9-2 同時讀取兩個資料表 9-3 區塊編輯設定 9-4 根據區塊設定來調整區塊 10. 加入搜尋 11. 加入偏好設定 11-1 加入分頁並套用偏好設定 12. 加入語系常數的方法
8-3
取消報名
取消報名實際上就是把 signups 中的一筆報名資料刪除而已。
還記得之前教的 確認後刪除 嗎?依樣畫葫蘆即可!
一、修改連結並產生相關函數
一樣先把取消報名連結改成這樣:
<a href="javascript:delete_signup({$action.action_id})" class="btn btn-danger btn-xs">取消報名</a>
接著修改 index.php 的 list_action 函數中利用 tadtools內建的 sweet_alert 類別再產生一組刪除的js函數,以便做出「確認後刪除的功能」:
//顯示活動列表
function list_action()
{
global $xoopsDB, $xoopsTpl, $isAdmin;
$tbl = $xoopsDB->prefix('actions');
$where = $isAdmin ? '' : "WHERE `enable` ='1' AND `end_date` > now() ";
$sql = "SELECT * FROM `{$tbl}` $where ORDER BY `end_date` DESC";
//getPageBar($原sql語法, 每頁顯示幾筆資料, 最多顯示幾個頁數選項);
$PageBar = getPageBar($sql, 5, 10);
$bar = $PageBar['bar'];
$sql = $PageBar['sql'];
$total = $PageBar['total'];
$xoopsTpl->assign('bar', $bar);
$xoopsTpl->assign('total', $total);
$result = $xoopsDB->query($sql) or web_error($sql);
$myts = MyTextSanitizer::getInstance();
while ($action = $xoopsDB->fetchArray($result)) {
$action['title'] = $myts->htmlSpecialChars($action['title']);
$action['content'] = $myts->displayTarea($action['content'], 1, 1, 1, 1, 0);
$actions[] = $action;
}
$xoopsTpl->assign('actions', $actions);
include_once XOOPS_ROOT_PATH . "/modules/tadtools/sweet_alert.php";
$sweet_alert = new sweet_alert();
$sweet_alert->render("delete_action", "admin/main.php?op=delete_action&action_id=", 'action_id');
$sweet_alert2 = new sweet_alert();
$sweet_alert2->render("delete_signup", "index.php?op=delete_signup&action_id=", 'action_id', "確定要取消嗎?" , "取消後就不能參加活動囉!" , "是!含淚取消!");
}
二、做出刪除的函數
接著到 index.php,先新增一組流程:
case "delete_signup":
delete_signup($action_id);
header("location:{$_SERVER['PHP_SELF']}?action_id=$action_id");
exit;
接著實際做出該函數:
//取消報名
function delete_signup($action_id)
{
global $xoopsDB, $xoopsUser;
$uid = $xoopsUser->uid();
$tbl = $xoopsDB->prefix('signups');
$sql = "DELETE FROM `{$tbl}` WHERE `action_id`='{$action_id}' and `uid`='{$uid}'";
$xoopsDB->queryF($sql) or web_error($sql);
$_SESSION['uid_signup'] = array_diff($_SESSION['uid_signup'], [$action_id]);
}
報名了要把該活動加到 $_SESSION['uid_signup'] 陣列中,同樣的,取消報名也要從 $_SESSION['uid_signup'] 陣列中把該編號拿掉。不拿掉會怎樣?不會怎樣,系統確實是刪了資料,但該活動還是會一直出現「取消報名」的按鈕而已。
所以,我們利用 array_diff([陣列一], [陣列二]) 來達成刪掉陣列中某個值。
三、關於array_diff()
這個其實並不是什麼移除陣列內容的函數,而是拿來比對兩個陣列的差異,並將差異的部份傳回一個新陣列。
所以,假設$_SESSION['uid_signup'] 陣列中有三個活動,依序為 [1, 2, 3],那麼,若是要取消活動 2,我們只要寫成 array_diff([1, 2, 3], [2]),該函數就會傳回陣列 [1, 3],因為這剛好是差異部份,是不是看起來如同 2 被刪除了一般!
1. 安裝開發環境 1-1 幾個您要知道的位置 1-2 下載 XOOPS250ModuleConversionFiles 1-3 認識 xoops_version.php 1-4 logo製作 1-5 上課範例及需求 2. 資料庫規劃 2-1 完成資料庫部份設定 3. 後台界面設定 3-1 修改 admin/menu.php 3-2 後台管理頁面 main.php 3-3 後台管理主頁樣板 4. XOOPS內建表單Class 4-1 XOOPS表單物件的基本用法 4-2 將資料送至樣板呈現 4-3 各種XOOPS表單元件 4-4 加入 TinyMCE 編輯器 4-5 在內建表單元件加入額外設定 4-6 修改日曆元件 4-7 改用 CKEditor 編輯器 4-8 自動功能 4-9 完整表單函數 5. $xoopsDB資料庫物件 5-1 資料過濾檢查 5-2 $xoopsUser 使用者物件取得使用者資料 5-3 寫入資料庫 5-4 建立安全的表單 5-5 異常處理 6. 在前台頁面顯示 6-1 header.php 6-2 修改前台流程 6-3 從資料庫讀出單一資料 6-4 製作顯示單一活動頁面 6-5 陣列傳至Smarty樣板的用法 6-6 顯示列表 6-7 讀出資料的安全性過濾 6-8 過濾所有讀出的函數 6-9 加入模組工具列 7. 加入管理功能 7-1 編輯活動 7-2 更新活動 7-3 加入確認後刪除的機制 7-4 加入刪除功能 7-5 根據不同身份顯示不同內容 7-6 根據不同狀態顯示標籤 7-7 加入分頁功能 8. 加入報名按鈕 8-1 加入報名功能 8-2 報名過後的界面改變 8-3 取消報名 9. 新增區塊 9-1 編輯區塊主函數 9-2 同時讀取兩個資料表 9-3 區塊編輯設定 9-4 根據區塊設定來調整區塊 10. 加入搜尋 11. 加入偏好設定 11-1 加入分頁並套用偏好設定 12. 加入語系常數的方法