:::
5-3-4 自定義分頁工具列
- 由於該工具列會直接輸出(該作者就這樣寫),而且我們想自己定義分頁按鈕的文字
- 所以,我們用
extends繼承yidas\widgets\Pagination的物件來修做成新的Paginator物件。 - 此語法可以放在
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 = '<'; } - 回到
index.php,將原本產生分頁工具列的程式改成這樣:// 產生分頁工具列 ob_start(); Paginator::widget(['pagination' => $pagination]); $paginator = ob_get_clean(); $smarty->assign('paginator', $paginator); - 由於該物件會直接輸出到畫面上,所以,我們利用緩衝函數
ob_start()及ob_get_clean()來獲取輸出的內容,並套用至樣板(避免直接輸出)。 - 最後,完整
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)); } - 最後看起來像這樣:

5-3-3 加入分頁