:::
主內容區域
4-2 create() 建立表單的物件方法
- 上單元的表單界面,除了用樣板來控制視覺上的界面外,還需要用來產生界面的一些預設值及額外功能,則需用到物件方法是:
create(),其預設內容如下:/** * submission 編輯表單 * * @param int $id 流水號 * * @return void */ public static function create($id = '') { global $xoopsTpl, $xoopsUser; Tools::chk_is_adm('', '', __FILE__, __LINE__); //抓取預設值 $submission = (!empty($id)) ? self::get(['id' => $id]) : []; //預設值設定 $def['id'] = $id; $def['start'] = date("Y-m-d H:i"); $def['end'] = date("Y-m-d H:i"); $user_uid = $xoopsUser ? $xoopsUser->uid() : ""; $def['uid'] = $user_uid; $def['create_time'] = date("Y-m-d H:i:s"); if (empty($submission)) { $submission = $def; } foreach ($submission as $key => $value) { $value = Tools::filter($key, $value, 'edit', self::$filter_arr); $$key = isset($submission[$key]) ? $submission[$key] : $def[$key]; $xoopsTpl->assign($key, $value); } $op = (!empty($id)) ? "submission_update" : "submission_store"; $xoopsTpl->assign('next_op', $op); //套用formValidator驗證機制 $formValidator = new FormValidator("#myForm", true); $formValidator->render(); //投稿說明 $ck = new CkEditor("submission", "content", $content); $ck->setHeight(200); $ck->setVar('placeholder', ''); $editor = $ck->render(); $xoopsTpl->assign('content_editor', $editor); My97DatePicker::render(); My97DatePicker::render(); //上傳表單 $TadUpFiles = new TadUpFiles("submission"); if ($id) { $TadUpFiles->set_col("submission_id",$id); //$TadUpFiles->set_dir('subdir', "/{$id}"); } //$TadUpFiles->set_var("require", true); //必填 //$TadUpFiles->set_var("show_tip", false); //不顯示提示 $submission_files_create = $TadUpFiles->upform(true, "submission_files", ""); $xoopsTpl->assign('submission_files_create', $submission_files_create); //加入Token安全機制 Utility::token_form(); } Tools::chk_is_adm('', '', __FILE__, __LINE__);用來檢查身份,預設為管理員,也就是只有管理原有權限,沒權限會被踢出。- 若是有傳入
$id,則會根據之抓取預設值,若沒有,也可以視需求手動設定預設值,例如我們希望截止日期$def['end']預設是一個星期後,那麼可以這麼寫://抓取預設值 $submission = (!empty($id)) ? self::get(['id' => $id]) : []; //預設值設定 $def['id'] = $id; $def['start'] = date("Y-m-d 08:00"); $def['end'] = date("Y-m-d 17:00", strtotime('+7 days')); $user_uid = $xoopsUser ? $xoopsUser->uid() : ""; $def['uid'] = $user_uid; $def['create_time'] = date("Y-m-d H:i:s"); $def['info']['award'] = '入選;優選;特選'; if (empty($submission)) { $submission = $def; } - 接著是將預設值或之前寫入的原值進行過濾,並且用
$xoopsTpl->assign()將之一一送到樣板:foreach ($submission as $key => $value) { $value = Tools::filter($key, $value, 'edit', self::$filter_arr); $$key = isset($submission[$key]) ? $submission[$key] : $def[$key]; $xoopsTpl->assign($key, $value); } - 若是有傳入
$id,表示是更新,因此,將$op設為submission_update反之則是新增寫入,其值為submission_store,一樣送至樣板,並命名為$next_op$op = (!empty($id)) ? "submission_update" : "submission_store"; $xoopsTpl->assign('next_op', $op); - 上述是表單的基本會用到的所有東西,幾乎都是固定的流程,唯一要改的可能只有預設值部份
- 接下來的部份算是錦上添花,首先是表單驗證機制,上方需有
use XoopsModules\Tadtools\FormValidator;就是使用
XoopsModules\Tadtools命名空間底下的FormValidator類別,接下來只要寫FormValidator就可以用了,不用每次都寫那一長串全名。FormValidator 詳細用法可以看這裡//套用formValidator驗證機制 $formValidator = new FormValidator("#myForm", true); $formValidator->render(); - 投稿說可以使用所見即所得編輯器,所以上方先加入:
use XoopsModules\Tadtools\CkEditor;初始化需填入模組名稱、欄位名稱,調整一下高度以及佔位符即可。CkEditor 詳細用法可以看這裡
$ck = new CkEditor("submission", "content", $content); $ck->setHeight(200); $ck->setVar('placeholder', '請填入投稿說明'); $ck->setToolbarSet('tadSimple'); $editor = $ck->render(); $xoopsTpl->assign('content_editor', $editor); - 投稿起訖日期可用小月曆挑選器,上方先加入:
use XoopsModules\Tadtools\My97DatePicker;就一行即可,不用任何參數。My97DatePicker 詳細用法可以看這裡
My97DatePicker::render(); - TadUpFiles上傳元件,上方先加入:
use XoopsModules\Tadtools\TadUpFiles;set_col()比較重要,用來設定這個上傳檔案應該屬於哪一筆資料,其餘的視情況使用,例如。TadUpFiles 詳細用法可以看這裡$TadUpFiles = new TadUpFiles("submission"); if ($id) { $TadUpFiles->set_col("submission_id",$id); $TadUpFiles->set_dir('subdir', "/{$id}"); } //$TadUpFiles->set_var("require", true); //必填 //$TadUpFiles->set_var("show_tip", false); //不顯示提示 $submission_files_create = $TadUpFiles->upform(true, "submission_files", ""); $xoopsTpl->assign('submission_files_create', $submission_files_create); - 其中
set_dir()也蠻常用,其值要有 / 開頭,例如$TadUpFiles->set_dir('subdir', "/$id"),可以設定檔案是否放入到子目錄中。若是要改,記得其他地方也都一併修改(store、update、create) - 產生表單用token,就一行,放上即可。
//加入Token安全機制 Utility::token_form();
4-1 調整建立投稿主題的表單界面