首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Yii 框架實現分頁功能完整教程

     編輯:PHP 綜合知識

Yii 分頁核心概念

在 Web 應用開發中,分頁是處理大量數據展示的基礎功能。Yii 框架通過 CPagination 類與 CLinkPager 控件的配合,提供了靈活且強大的分頁解決方案。本文將通過實戰代碼示例,詳細講解如何在控制器與視圖層實現完整的分頁功能。

控制器層實現邏輯

在控制器中,我們需要完成數據查詢條件構建、總記錄數統計、分頁對象初始化以及數據獲取等核心步驟:

public function actionTest() {
    // 建立查詢條件,按 ID 降序排列
    $criteria = new CDbCriteria();
    $criteria->order = 'id DESC';
    
    // 統計符合條件的總記錄數
    $count = User::model()->count($criteria);
    
    // 實例化分頁對象,傳入總記錄數
    $pager = new CPagination($count);
    // 設置每頁顯示 10 條記錄
    $pager->pageSize = 10;
    // 將分頁限制應用到查詢條件中
    $pager->applyLimit($criteria);
    
    // 執行查詢獲取當前頁數據
    $userList = User::model()->findAll($criteria);
    
    // 渲染視圖,傳遞數據列表與分頁對象
    $this->render('test', array(
        'list' => $userList,
        'pages' => $pager
    ));
}

視圖層分頁展示

視圖文件中遍歷數據列表並調用 CLinkPager 控件生成分頁導航:

<?php foreach ($list as $user) { ?>
    <div class="user-item">
        <span class="username"><?php echo CHtml::encode($user->username); ?></span>
        <span class="user-id">ID: <?php echo $user->id; ?></span>
    </div>
<?php } ?>

<?php 
$this->widget('CLinkPager', array(
    'header' => '',
    'firstPageLabel' => '首頁',
    'lastPageLabel' => '末頁',
    'prevPageLabel' => '上一頁',
    'nextPageLabel' => '下一頁',
    'pages' => $pages,
    'maxButtonCount' => 13,
    'cssFile' => false, // 禁用默認 CSS,便於自定義樣式
    'htmlOptions' => array('class' => 'pagination')
));
?>

進階配置技巧

自定義分頁 URL 規則

通過配置 urlManager 可實現更友好的分頁 URL:

'urlManager' => array(
    'urlFormat' => 'path',
    'showScriptName' => false,
    'rules' => array(
        'user/list/page/' => 'user/list',
    ),
),

Ajax 分頁無刷新加載

結合 CLinkPager 的 ajaxUpdate 參數可實現局部刷新:

$this->widget('CLinkPager', array(
    'pages' => $pages,
    'ajaxUpdate' => '#user-list-container', // 目標容器 ID
    'beforeAjaxUpdate' => 'js:function(id, options) { $("#loading").show(); }',
    'afterAjaxUpdate' => 'js:function(id, data) { $("#loading").hide(); }',
));

常見問題與優化建議

  • 大數據量優化:避免使用 count(*) 統計全表,可維護單獨的計數表或使用緩存
  • 分頁緩存:對熱門頁面的分頁數據進行片段緩存,減少數據庫壓力
  • SEO 優化:為分頁頁面添加 rel="prev/next" 標籤,避免內容重複收錄
  • 用戶體驗:提供「每頁顯示條數」選擇器,記住用戶偏好設置

總結

Yii 的分頁機制通過 CPagination 處理邏輯計算,CLinkPager 負責視圖渲染,職責分離清晰。掌握核心參數配置與進階用法,能滿足絕大多數業務場景的分頁需求。實際項目中建議封裝基礎分頁組件,統一風格並減少重複代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved