:::
主內容區域
11-3 建立區塊
- 先將區塊安裝起來,基本上,大致就能用了。
- 一個模組會有哪些區塊定義在
xoops_version.php裡面//---區塊設定---// $modversion['blocks'] = [ [ 'file' => 'submission_new.php', 'name' => _MI_SUBMISSION_NEW_BLOCK_NAME, 'description' => _MI_SUBMISSION_NEW_BLOCK_DESC, 'show_func' => 'submission_new', 'template' => 'submission_new.tpl', 'edit_func' => 'submission_new_edit', 'options' => '10|1', ], [ 'file' => 'submission_list.php', 'name' => _MI_SUBMISSION_LIST_BLOCK_NAME, 'description' => _MI_SUBMISSION_LIST_BLOCK_DESC, 'show_func' => 'submission_list', 'template' => 'submission_list.tpl', 'edit_func' => 'submission_list_edit', 'options' => '10|1', ], ];edit_func及options是有區塊設定界面才需要,options的預設值是用|隔開。 - 編輯
blocks/submission_list.php先看「投稿主題一覽」的編輯函數submission_list_edit($options),預設值用$options陣列傳入//區塊編輯函式 (submission_list_edit) function submission_list_edit($options) { //$options[0] : "顯示數量"預設值 $options[0] = $options[0] ? (int) $options[0] : 10; //$options[1] : "僅可投稿"預設值 $checked_1_0 = ($options[1] == '1') ? 'checked' : ''; $checked_1_1 = ($options[1] == '0') ? 'checked' : ''; $form = " <ol class='my-form'> <!--顯示數量--> <li class='my-row'> <lable class='my-label'>顯示數量</lable> <div class='my-content'> <input type='text' name='options[0]' value='{$options[0]}' class='my-input'> </div> </li> <!--僅可投稿--> <li class='my-row'> <lable class='my-label'>僅可投稿</lable> <div class='my-content'> <input type='radio' name='options[1]' value='1' $checked_1_0> " . _YES . " <input type='radio' name='options[1]' value='0' $checked_1_1> " . _NO . " </div> </li> </ol> "; return $form; } - 在編輯「投稿主題一覽」區塊時,就可以看到自己定義的表單,此處只要預設值有顯示正確即可。

- 接著編輯「投稿主題一覽」的顯示函數
submission_list($options),設定值一樣用$options陣列傳入,然後根據$options的值,調整對應的程式碼//區塊主函式 (submission_list) function submission_list($options) { global $xoopsDB; //{$options[0]} : 顯示數量 $block['options0'] = isset($options[0]) ? (int) $options[0] : 10; //{$options[1]} : 僅可投稿 $block['options1'] = isset($options[1]) ? (int) $options[1] : 1; $where = $block['options1'] ? 'WHERE `start` <= NOW() AND `end` >= NOW()' : ''; $sql = "SELECT * FROM `" . $xoopsDB->prefix("submission") . "` $where ORDER BY `end` DESC LIMIT {$options[0]}"; $result = Utility::query($sql); $content = []; while ($all = $xoopsDB->fetchArray($result)) { $content[] = $all; } $block['content'] = $content; return $block; }- 要限制數量,就必須在SQL語法後面用
LIMIT來限制筆數 - 要顯示可以投稿的主題,就必須目前仍在其起訖時間之中,所以根據的值,來判斷是否要在SQL中加入
WHERE `start` <= NOW() AND `end` >= NOW()
- 要限制數量,就必須在SQL語法後面用
- 「投稿主題一覽」的樣板檔在
templates/blocks/submission_list.tpl,有需要可以調整之(若有連結需用完整網址,不可用相對位置)。 - 編輯
blocks/submission_new.php先看「最新投稿」的編輯函數submission_new_edit($options),預設值用$options陣列傳入//區塊編輯函式 (submission_new_edit) function submission_new_edit($options) { //$options[0] : "顯示數量"預設值 $options[0] = $options[0] ? (int) $options[0] : 10; //$options[1] : "僅獲選"預設值 $checked_1_0 = ($options[1] == '1') ? 'checked' : ''; $checked_1_1 = ($options[1] == '0') ? 'checked' : ''; $form = " <ol class='my-form'> <!--顯示數量--> <li class='my-row'> <lable class='my-label'>顯示數量</lable> <div class='my-content'> <input type='text' name='options[0]' value='{$options[0]}' class='my-input'> </div> </li> <!--僅獲選--> <li class='my-row'> <lable class='my-label'>僅獲選</lable> <div class='my-content'> <input type='radio' name='options[1]' value='1' $checked_1_0> " . _YES . " <input type='radio' name='options[1]' value='0' $checked_1_1> " . _NO . " </div> </li> </ol> "; return $form; } - 接著編輯「最新投稿」的顯示函數
submission_new($options),設定值一樣用$options陣列傳入,然後根據$options的值,調整對應的程式碼//區塊主函式 (submission_new) function submission_new($options) { global $xoopsDB; //{$options[0]} : 顯示數量 $block['options0'] = isset($options[0]) ? (int) $options[0] : 10; //{$options[1]} : 僅獲選 $block['options1'] = isset($options[1]) ? (int) $options[1] : 1; $and = $block['options1'] ? "AND `award` != '' " : ''; $sql = "SELECT * FROM `" . $xoopsDB->prefix("submission_data") . "` WHERE `review_time` != '0000-00-00 00:00:00' AND `award` != 'x' $and ORDER BY `id` DESC LIMIT {$options[0]}"; $result = Utility::query($sql); $content = []; while ($all = $xoopsDB->fetchArray($result)) { $content[] = $all; } $block['content'] = $content; return $block; }- 要限制數量,就必須在SQL語法後面用
LIMIT來限制筆數 - 要顯示有獲獎的,需額外加入獲獎欄位不為空,所以根據設定的值,來判斷是否要在SQL中加入
AND `award` != '',一般也要列出已經審核過,且不是「不通過」的文章WHERE `review_time` != '0000-00-00 00:00:00' AND `award` != 'x'
- 要限制數量,就必須在SQL語法後面用
- 「最新投稿」的樣板檔在
templates/blocks/submission_new.tpl,需要其連結位置為:index.php?op=submission_data_show&id=<{$data.id}><div class="card"> <ul class="list-group list-group-flush"> <{foreach from=$block.content item=data}> <li class="list-group-item"> <a href="<{$xoops_url}>/modules/submission/index.php?op=submission_data_show&id=<{$data.id}>"><{$data.title}></a> </li> <{/foreach}> </ul> </div>
11-2 建立搜尋工具