:::

5-3-4 自定義分頁工具列

  1. 由於該工具列會直接輸出(該作者就這樣寫),而且我們想自己定義分頁按鈕的文字
  2. 所以,我們用 extends 繼承 yidas\widgets\Pagination 的物件來修做成新的 Paginator 物件。
  3. 此語法可以放在 index.php,但為了不讓 index.php 看起來太複雜,所以,我們放在 header.php,如此,有需要的頁面都可以呼叫使用,故在 header.php 最下方加入:
    // 自定義分頁工具
    class Paginator extends yidas\widgets\Pagination
    {
        public $buttonCount = 10;
        public $firstPageLabel = '<<';
        public $lastPageLabel = '>>';
        public $nextPageLabel = '>';
        public $prevPageLabel = '<';
    }
    

     

  4. 回到 index.php,將原本產生分頁工具列的程式改成這樣:
    // 產生分頁工具列
    ob_start();
    Paginator::widget(['pagination' => $pagination]);
    $paginator = ob_get_clean();
    $smarty->assign('paginator', $paginator);

     

  5. 由於該物件會直接輸出到畫面上,所以,我們利用緩衝函數 ob_start()ob_get_clean() 來獲取輸出的內容,並套用至樣板(避免直接輸出)。
  6. 最後,完整 index.php 語法如下:
    <?php
    use yidas\data\Pagination;
    require_once 'header.php';
    
    // 計算總資料數
    try {
        $stmt = $pdo->prepare('SELECT count(*) FROM `news`');
        $stmt->execute();
        list($totalCount) = $stmt->fetch(PDO::FETCH_NUM);
        // 產生分頁物件
        $pagination = new Pagination(['totalCount' => $totalCount, 'perPage' => $perPage]);
        // 產生分頁工具列
        ob_start();
        Paginator::widget(['pagination' => $pagination]);
        $paginator = ob_get_clean();
        $smarty->assign('paginator', $paginator);
    } catch (PDOException $e) {
        die("計算總資料數失敗:" . $e->getMessage());
    }
    
    try {
        // 準備SQL語句
        $sql = "SELECT * FROM `news` ORDER BY `date` DESC LIMIT ?, ?";
    
        // 預備語句
        $stmt = $pdo->prepare($sql);
    
        // 綁定參數並執行語句
        $stmt->execute([$pagination->offset, $pagination->limit]);
        $all_news = [];
        $news = $stmt->fetchAll();
        foreach ($news as $row) {
            $media = $row['media'];
            unset($row['media']);
            $row = array_map('htmlspecialchars', $row);
            $row['files'] = json_decode($media, true);
            $all_news[] = $row;
        }
        $smarty->assign('all_news', $all_news);
    
    } catch (PDOException $e) {
        echo "資料庫連接錯誤:" . $e->getMessage();
    }
    $smarty->display('index.tpl');
    
    // 顯示變數內容
    function dd($array = [])
    {
        header("Content-Type: application/json; charset=utf-8");
        die(json_encode($array, 256));
    }
    
  7. 最後看起來像這樣:

 


:::

書籍目錄

展開 | 闔起

http%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbsn%3D52%26tbdsn%3D1977

計數器

今天: 1344134413441344
昨天: 4745474547454745
總計: 7711305771130577113057711305771130577113057711305