:::

11-3 建立區塊

  1. 先將區塊安裝起來,基本上,大致就能用了。
    img  
  2. 一個模組會有哪些區塊定義在 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 的預設值是用 | 隔開。

  3. 編輯 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;
    }
  4. 在編輯「投稿主題一覽」區塊時,就可以看到自己定義的表單,此處只要預設值有顯示正確即可。
    img
  5. 接著編輯「投稿主題一覽」的顯示函數 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;
    }
    1. 要限制數量,就必須在SQL語法後面用 LIMIT 來限制筆數
    2. 要顯示可以投稿的主題,就必須目前仍在其起訖時間之中,所以根據的值,來判斷是否要在SQL中加入WHERE `start` <= NOW() AND `end` >= NOW()
  6. 「投稿主題一覽」的樣板檔在templates/blocks/submission_list.tpl,有需要可以調整之(若有連結需用完整網址,不可用相對位置)。
  7. 編輯 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;
    }
  8. 接著編輯「最新投稿」的顯示函數 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;
    }
    1. 要限制數量,就必須在SQL語法後面用 LIMIT 來限制筆數
    2. 要顯示有獲獎的,需額外加入獲獎欄位不為空,所以根據設定的值,來判斷是否要在SQL中加入 AND `award` != '',一般也要列出已經審核過,且不是「不通過」的文章  WHERE `review_time` != '0000-00-00 00:00:00' AND `award` != 'x'
  9. 「最新投稿」的樣板檔在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>
    

     

 


:::

書籍目錄

展開 | 闔起

快速登入


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

計數器

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