:::

4-2 create() 建立表單的物件方法

  1. 上單元的表單界面,除了用樣板來控制視覺上的界面外,還需要用來產生界面的一些預設值及額外功能,則需用到物件方法是: 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();
    }
  2. Tools::chk_is_adm('', '', __FILE__, __LINE__); 用來檢查身份,預設為管理員,也就是只有管理原有權限,沒權限會被踢出。
  3. 若是有傳入 $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;
    }
  4. 接著是將預設值或之前寫入的原值進行過濾,並且用 $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);
    }
  5. 若是有傳入 $id,表示是更新,因此,將 $op 設為 submission_update 反之則是新增寫入,其值為 submission_store,一樣送至樣板,並命名為 $next_op
    $op = (!empty($id)) ? "submission_update" : "submission_store";
    $xoopsTpl->assign('next_op', $op);
  6. 上述是表單的基本會用到的所有東西,幾乎都是固定的流程,唯一要改的可能只有預設值部份
  7. 接下來的部份算是錦上添花,首先是表單驗證機制,上方需有
    use XoopsModules\Tadtools\FormValidator;

    就是使用 XoopsModules\Tadtools 命名空間底下的 FormValidator 類別,接下來只要寫 FormValidator 就可以用了,不用每次都寫那一長串全名。FormValidator 詳細用法可以看這裡

    //套用formValidator驗證機制
    $formValidator = new FormValidator("#myForm", true);
    $formValidator->render();
  8. 投稿說可以使用所見即所得編輯器,所以上方先加入:
    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);
    
  9. 投稿起訖日期可用小月曆挑選器,上方先加入:
    use XoopsModules\Tadtools\My97DatePicker;

     就一行即可,不用任何參數。My97DatePicker 詳細用法可以看這裡

    My97DatePicker::render();
  10. 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);
    
  11. 其中set_dir()也蠻常用,其值要有 / 開頭,例如 $TadUpFiles->set_dir('subdir', "/$id"),可以設定檔案是否放入到子目錄中。若是要改,記得其他地方也都一併修改(storeupdatecreate
  12. 產生表單用token,就一行,放上即可。
    //加入Token安全機制
    Utility::token_form();

     


:::

書籍目錄

展開 | 闔起

快速登入


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

計數器

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