首頁 >php框架 >ThinkPHP >thinkphp如何實作分頁

thinkphp如何實作分頁

PHPz
PHPz原創
2023-04-11 10:42:561932瀏覽

ThinkPHP是一款基於MVC開發模式的PHP框架,既然是開發MVC應用,就少不了分頁的功能。那麼,ThinkPHP如何實現分頁呢?以下就為大家介紹ThinkPHP如何實現分頁。

一、ThinkPHP分頁的基本概念

分頁就是將一個大的資料集合分成N頁,讓使用者只能查看其中的一部分。 ThinkPHP中分頁分為兩種,一是普通分頁,另一種是AJAX分頁。

普通分頁,就是每一頁都需要刷新整個頁面,資料透過PHP程式碼從伺服器端取得出來,再回到客戶端,這種方式的資料互動效率低,但編寫簡單。

AJAX分頁,是透過前端非同步請求數據,透過Ajax技術將資料傳遞到伺服器端,伺服器端從資料庫取得資料後,將資料傳回前端。這種方式資料互動效率高,但是需要使用較為複雜的前端技術。

二、ThinkPHP分頁的使用方法

具體來說,ThinkPHP中的分頁使用,主要包括兩個模組:Model模組和View模組。在Model模組中,我們透過使用ThinkPHP的Query類別或Db類別從資料庫中查詢到資料。在View模組中,我們透過使用ThinkPHP的分頁類Pagination,以及內建的Paginator控件,進行資料展示操作。

  1. 在Model模組中實作資料查詢操作

在Model模組中,我們首先需要從資料庫中查詢到數據,然後根據分頁的大小來設定資料的查詢偏移量和查詢數量,只傳回所需的一頁資料。具體的操作如下:

<?php
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
    public function getPageUsers($page=1,$rows=10){
        $result = array();
        $count = $this->count(); // 获取总记录数
        $offset = ($page-1)*$rows; // 查询的起始位置
        $data = $this->limit($offset,$rows)->select(); // 查询当前页的记录
        $pagination = new \Think\Paginator($count,$rows); // 实例化分页对象
        $result['rows'] = $data;
        $result['pagination'] = $pagination->show(); // 获取分页显示的HTML代码
        return $result;
    }
}

在上述程式碼中,使用了count()方法來取得總記錄數,limit()方法取得目前頁的記錄,以及Pagination類別實例化分頁物件。值得注意的是,limit()方法支援鍊式操作,可以使用where()方法配合,實作更為複雜的查詢操作。

  1. 在View模組中實作資料展示操作

在View模組中,我們需要使用ThinkPHP內建的Paginator控制項來顯示分頁訊息,以及使用ThinkPHP的分頁類Pagination來生成分頁HTML代碼。具體操作如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>用户信息管理</title>
    <link rel="stylesheet" type="text/css" href="__PUBLIC__/bootstrap/css/bootstrap.min.css">
</head>
<body>
<div class="container">
    <div class="panel panel-default">
        <div class="panel-heading">用户信息管理</div>
        <div class="panel-body">
            <table class="table table-striped">
                <thead>
                <tr>
                    <th>ID</th>
                    <th>用户名</th>
                    <th>年龄</th>
                    <th>电话</th>
                    <th>邮箱</th>
                </tr>
                </thead>
                <tbody>
                <?php foreach($users[&#39;rows&#39;] as $user):?>
                <tr>
                    <td><?php echo $user[&#39;id&#39;];?></td>
                    <td><?php echo $user[&#39;name&#39;];?></td>
                    <td><?php echo $user[&#39;age&#39;];?></td>
                    <td><?php echo $user[&#39;phone&#39;];?></td>
                    <td><?php echo $user[&#39;email&#39;];?></td>
                </tr>
                <?php endforeach;?>
                </tbody>
            </table>
            <nav aria-label="Page navigation">
                <?php echo $users[&#39;pagination&#39;];?>
            </nav>
        </div>
    </div>
</div>
</body>
</html>

在上面的程式碼中,我們主要使用了Paginator控制項和Pagination類別。在Paginator控制項中,我們可以設定控制項的佈局、樣式等。在Pagination類別中,我們呼叫了show()方法來取得分頁的HTML程式碼,供Paginator控制項使用。同時在foreach循環中,我們將從Model層傳輸過來的$rows數組展示到了表格中。

三、ThinkPHP分頁的常見問題

  1. 怎麼設定每頁顯示的記錄數?

在Model層的getPageUsers方法中,我們可以設定預設的每頁記錄數,如下:

public function getPageUsers($page=1,$rows=10){
    ...
}

其中,$rows表示預設每頁記錄數,我們也可以在View層直接傳入參數來改變每頁記錄數。

  1. 如何顯示第一頁?

在View層中,當使用者點選第一頁時,$page參數的值為1,我們需要相應地改變資料的查詢範圍。具體操作如下:

public function getPageUsers($page=1,$rows=10){
    $result = array();
    $count = $this->count(); // 获取总记录数
    $offset = ($page-1)*$rows; // 查询的起始位置
    $data = $this->limit($offset,$rows)->select(); // 查询当前页的记录
    
    // 如果是第一页,直接返回第一页的数据
    if($page == 1){
        $pagination = new \Think\Paginator($count,$rows);
        $result['rows'] = $data;
        $result['pagination'] = $pagination->show();
        return $result;
    }
    
    // 如果不是第一页,则查询第一页的数据,获取分页HTML代码
    $firstPageData = $this->limit(0,$rows)->select();
    $pagination = new \Think\Paginator($count,$rows);
    $result['rows'] = $data;
    $result['pagination'] = str_replace("1</a>",$firstPageData."</a>",$pagination->show());
    return $result;
}

在上面的程式碼中,當$page等於1時,我們直接傳回第一頁的資料。當$page大於1時,我們重新查詢第一頁數據,取得分頁HTML程式碼,並將其替換到目前頁的「第一頁」。這樣就可以實現在任一頁點選「第一頁」按鈕,都可以傳回第一頁資料。

  1. 怎麼樣使用AJAX分頁?

對於普通分頁,每次翻頁都需要重新要求整個頁面,這對於大型資料集顯然是低效的,所以我們常常使用AJAX技術來實現無刷新分頁。

使用AJAX分頁需要注意以下幾點:

(1)在View層中,需要加入類似上方的jQuery程式碼,來監聽分頁按鈕:

$(function () { // 加载页面时,注册分页事件
    $("#page").on('click','a',function(){
        var url = $(this).attr('href');
        $("#table").load(url);
        return false;
    });
});

在上面的程式碼中,我們在分頁按鈕上新增了一個click事件監聽器,點擊按鈕的時候,發送一個AJAX請求,將資料放回填入對應的位置。

(2)在Model層中,需要在getPageUsers方法中傳回JSON格式的數據,如下:

public function getPageUsers($page=1,$rows=10){
    ...
    $result = array();
    $pagination = new \Think\Paginator($count,$rows);
    $result['rows'] = $data;
    $result['pagination'] = $pagination->show();
    return json_encode($result);
}

這裡使用了json_encode()函數來將資料格式化為JSON格式傳回。這樣在View層就可以很方便解析資料。

以上是thinkphp如何實作分頁的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn