:::
主內容區域
10-2 投稿的 create 表單界面及物件
- 修改
index.php變數過濾部份,使之可以接收到投稿主題編號$submission_id/*-----------變數過濾----------*/ $op = Request::getString('op'); $id = Request::getInt('id'); $files_sn = Request::getInt('files_sn'); $submission_id = Request::getInt('submission_id'); - 修改流程中有用到
Submission_data::create()的流程,將之加入$submission_id參數//新增用表單 case 'submission_data_create': Submission_data::create($submission_id); break; //修改用表單 case 'submission_data_edit': Submission_data::create($submission_id, $id); $op = 'submission_data_create'; break; - 接著切換至
class/Submission_data.php - 為了取得投稿主題的內容,我們在最上方加入
use XoopsModules\Submission\Submission; - 接著修改
class/Submission_data.php的create(),多加入一個$submission_id參數,並將判斷身份的那一行註解掉,這樣學生才有權限進入表單。public static function create($submission_id, $id = '') { global $xoopsTpl, $xoopsUser; // Tools::chk_is_adm('', '', __FILE__, __LINE__); Submission::show(['id' => $submission_id], [], 'assign_all'); //抓取預設值 $submission_data = (!empty($id)) ? self::get(['id' => $id]) : []; //預設值設定 $def['id'] = $id; $def['review_time'] = date("Y-m-d H:i:s");- 利用
Submission::show()來取得該投稿主題的完整設定,第三個參數用assign_all以便將$submission用陣列方式將送至樣板。 - 亦可將
Submission::show()放至submission_data_create或submission_data_edit流程中,這樣會更清楚,物件也更單純 - 然後
class/Submission_data.php的create()在CK編輯器部份,可以用$ck->setToolbarSet('tadSimple');簡化其工具列//投稿內容 $ck = new CkEditor("submission", "content", $content); $ck->setHeight(200); $ck->setVar('placeholder', ''); $ck->setToolbarSet('tadSimple'); $editor = $ck->render();
- 利用
- 再來修改
templates/op_submission_data_create.tpl,將標題及說明加到最上面<h1 class="my text-center"> <a href="<{$smarty.server.PHP_SELF}>" class="text-black-50" data-bs-toggle="tooltip" title="回投稿管理列表"> <i class="fa-solid fa-turn-up fa-rotate-270"></i> </a> <{$submission.title}> </h1> <h4 class="my text-center"><i class="fa-solid fa-calendar-check"></i> 投稿開始:<{$submission.start}></h4> <h4 class="my text-center"><i class="fa-solid fa-calendar-xmark"></i> 投稿截止:<{$submission.end}></h4> <div class="text-center"> <div class="alert alert-warning d-inline-block text-center py-1 px-4 my-3 mx-auto"> <i class="fa fa-user"></i> <{$submission.uid_name}> 發布於 <{$submission.create_time}> </div> </div> <div class="my-border"> <{$submission.content}> <{$submission.files}> </div> - 若是發布者姓名沒出現,請檢查
class/Submission.php的show(),其中在抓取使用者姓名時,有沒有多加一個:$all['uid_name'] =//將 uid 編號轉換成使用者姓名(或帳號) $uid_name = $all['uid_name'] = Utility::get_name_by_uid($uid); - 接著再整併姓名、班級(新增班級輸入框)、指導老師
<div class="form-group row mb-3"> <!--投稿姓名--> <label class="col-md-2 control-label col-form-label text-md-right text-md-end"> <{$smarty.const._MD_SUBMISSION_DATA_NAME}> </label> <div class="col-md-2"> <input type="text" name="name" id="name" class="form-control " value="<{$name}>" placeholder="<{$smarty.const._MD_SUBMISSION_DATA_NAME}>"> </div> <!--年級--> <div class="col-md-4"> <div class="input-group"> <span class="input-group-text">班級:</span> <select name="grade" id="grade" class="form-control form-select validate[required]" size=1> <option value=""></option> <{foreach from=$submission.info.grade item=submission_grade}> <option value="<{$submission_grade}>" <{if $grade == $submission_grade}>selected<{/if}>><{$submission_grade}></option> <{/foreach}> </select> <span class="input-group-text">年</span> <input type="text" name="info[class]" class="form-control validate[required]" value="<{$info.class}>"> <span class="input-group-text">班</span> </div> </div> <!--指導老師--> <label class="col-md-2 control-label col-form-label text-md-right text-md-end"> <{$smarty.const._MD_SUBMISSION_DATA_TEACHER}> </label> <div class="col-md-2"> <input type="text" name="teacher" id="teacher" class="form-control " value="<{$teacher}>" placeholder="<{$smarty.const._MD_SUBMISSION_DATA_TEACHER}>"> </div> </div> - 接著刪除獎項、其他資訊等這類不該出現在學生投稿界面上的欄位。
- 然後再加入輸入投稿密碼的欄位:
<!--投稿密碼--> <{if $submission.info.pass_code}> <div class="form-group row mb-3"> <label class="col-md-2 control-label col-form-label text-md-right text-md-end"> 投稿密碼 </label> <div class="col-md-10"> <input type="text" name="pass_code" id="pass_code" class="form-control validate[required]" placeholder="請輸入投稿密碼(若不曉得密碼,可以詢問「<{$submission.uid_name}>」老師)"> </div> </div> <{/if}> - 最後的送出按鈕確定有包含
submission_id及op,submission_id欄位的值可以從$submission陣列取得,亦即$submission.id,並且各自都有值即可<div class="bar text-center"> <input type='hidden' name="submission_id" value="<{$submission.id}>"> <{$token_form|default:''}> <input type="hidden" name="op" value="<{$next_op|default:''}>"> <input type="hidden" name="id" value="<{$id}>"> <button type="submit" class="btn btn-primary"><i class="fa fa-floppy-disk" aria-hidden="true"></i> <{$smarty.const._TAD_SAVE}>(日後的修改密碼為:<code style="background:white"><{$info.code}></code> 請牢記)</button> </div> - 最後的畫面會如下:

10-1 修改學生看到的所有投稿主題畫面