:::

10-2 投稿的 create 表單界面及物件

  1. 修改 index.php 變數過濾部份,使之可以接收到投稿主題編號 $submission_id
    /*-----------變數過濾----------*/
    $op            = Request::getString('op');
    $id            = Request::getInt('id');
    $files_sn      = Request::getInt('files_sn');
    $submission_id = Request::getInt('submission_id');
  2. 修改流程中有用到 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;
  3. 接著切換至 class/Submission_data.php
  4. 為了取得投稿主題的內容,我們在最上方加入
    use XoopsModules\Submission\Submission;
  5. 接著修改 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");
    1. 利用 Submission::show() 來取得該投稿主題的完整設定,第三個參數用 assign_all 以便將 $submission 用陣列方式將送至樣板。
    2. 亦可將 Submission::show() 放至submission_data_createsubmission_data_edit流程中,這樣會更清楚,物件也更單純
    3. 然後 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();
  6. 再來修改 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>
  7. 若是發布者姓名沒出現,請檢查 class/Submission.php 的 show(),其中在抓取使用者姓名時,有沒有多加一個: $all['uid_name'] =
    //將 uid 編號轉換成使用者姓名(或帳號)
    $uid_name = $all['uid_name'] = Utility::get_name_by_uid($uid);
  8. 接著再整併姓名、班級(新增班級輸入框)、指導老師
    <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>
  9. 接著刪除獎項、其他資訊等這類不該出現在學生投稿界面上的欄位。
  10. 然後再加入輸入投稿密碼的欄位:
    <!--投稿密碼-->
    <{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}>
    
  11. 最後的送出按鈕確定有包含submission_idopsubmission_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>
  12. 最後的畫面會如下:
    img

 


:::

書籍目錄

展開 | 闔起

快速登入


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

計數器

今天: 810810810
昨天: 1856185618561856
總計: 8776734877673487767348776734877673487767348776734