控制器動作
<?php
public function actionPage() {
$criteria = new CDbCriteria();
// 可加入條件:$criteria->condition = 'status=1';
$count = Archives::model()->count($criteria);
$pages = new CPagination($count);
$pages->pageSize = 10; // 每頁筆數
$pages->applyLimit($criteria); // 自動套用 LIMIT/OFFSET
$models = Archives::model()->findAll($criteria);
$this->render('archives', [
'models' => $models,
'pages' => $pages,
]);
}
?>
視圖檔案 (archives.php)
<ul>
<?php foreach ($models as $model): ?>
<li><?php echo CHtml::encode($model->title); ?></li>
<?php endforeach; ?>
</ul>
<?php
$this->widget('CLinkPager', [
'pages' => $pages,
'header' => '',
'prevPageLabel' => '上一頁',
'nextPageLabel' => '下一頁',
'firstPageLabel' => '首頁',
'lastPageLabel' => '末頁',
'cssFile' => 'css/pager.css', // 自訂樣式檔
'maxButtonCount' => 10, // 顯示頁碼按鈕數
]);
?>
關鍵類別說明
| 類別 | 用途 |
CPagination | 分頁邏輯:總筆數、頁大小、當前頁、LIMIT/OFFSET 計算 |
CLinkPager | 分頁 UI 元件:產生頁碼連結、上下頁、首末頁 |
常用屬性配置
pageSize:每頁筆數(預設 10)
pageVar:查詢字串參數名(預設 'page')
route:指定分頁連結路由(預設當前控制器/動作)
params:分頁連結額外查詢參數
進階:AJAX 分頁
<?php
$this->widget('CLinkPager', [
'pages' => $pages,
'ajaxUpdate' => '#content-container', // 目標容器 ID
'ajaxType' => 'GET',
]);
?>
Yii2 差異說明
- Yii2 使用
yii\data\Pagination + yii\widgets\LinkPager
- API 相似但命名空間不同,
applyLimit() 改為 $query->limit($pagination->limit)->offset($pagination->offset)
- Yii2 支援
yii\data\ActiveDataProvider 整合 ActiveRecord