ホームページ  >  記事  >  PHPフレームワーク  >  thinkphp でページングを実装する方法

thinkphp でページングを実装する方法

PHPz
PHPzオリジナル
2023-04-11 10:42:561894ブラウズ

ThinkPHP は MVC 開発モデルに基づいた PHP フレームワークであり、MVC アプリケーションを開発するため、ページング機能は不可欠です。では、ThinkPHP はどのようにページングを実装するのでしょうか? ThinkPHP がページングをどのように実装するかを紹介します。

1. ThinkPHP ページングの基本概念

ページングは​​、大規模なデータ コレクションを N ページに分割して、ユーザーがその一部のみを表示できるようにすることです。 ThinkPHP には 2 種類のページングがあり、1 つは通常のページング、もう 1 つは AJAX ページングです。

通常のページングとは、各ページがページ全体を更新する必要があることを意味します。データは、PHP コードを通じてサーバーから取得され、クライアントに返されます。このデータ対話方法は非効率ですが、記述するのは簡単です。

AJAX ページングとは、フロントエンドから非同期にデータを要求し、Ajax 技術を通じてサーバーにデータを転送することで、サーバー側がデータベースからデータを取得した後、フロントエンドにデータを返します。終わり。このデータ対話方法は非常に効率的ですが、より複雑なフロントエンド テクノロジを使用する必要があります。

2. ThinkPHP でのページングの使用方法

具体的には、ThinkPHP でのページングの使用には、主に Model モジュールと View モジュールの 2 つのモジュールが含まれます。 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 のページングを使用する必要があります。 class 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() メソッドを呼び出して、Paginator コントロールで使用するページネーション HTML コードを取得しました。同時に、foreach ループで、Model レイヤーからテーブルに転送された $rows 配列を表示します。

3. ThinkPHP ページングに関するよくある質問

  1. 各ページに表示されるレコード数を設定するにはどうすればよいですか?

Model レイヤーの getPageUsers メソッドでは、次のようにページあたりのデフォルトのレコード数を設定できます。

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

このうち、$rows はデフォルトのレコード数を表します。ページごとに、ビュー レイヤーにパラメーターを直接渡して、ページごとのレコード数を変更することもできます。

  1. 最初のページを表示するにはどうすればよいですか?

ビュー レイヤーで、ユーザーが最初のページをクリックすると、$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) ビュー レイヤーで、ページング ボタンを監視するために、上記と同様の jQuery コードを追加する必要があります。

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

上記のコードでは、ページング ボタンにクリック イベント リスナーを追加します。ボタンがクリックされると、対応する位置にデータを戻すための AJAX リクエストが送信されます。

(2) モデル層では、次のように 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形式です。このようにして、ビュー レイヤーでデータを簡単に解析できます。

以上がthinkphp でページングを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。