ホームページ >PHPフレームワーク >ThinkPHP >thinkphp でページングを実装する方法
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 コントロールを使用してデータ表示操作を実行します。
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() メソッドと組み合わせて使用すると、より複雑なクエリ操作を実装できることに注意してください。
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['rows'] as $user):?> <tr> <td><?php echo $user['id'];?></td> <td><?php echo $user['name'];?></td> <td><?php echo $user['age'];?></td> <td><?php echo $user['phone'];?></td> <td><?php echo $user['email'];?></td> </tr> <?php endforeach;?> </tbody> </table> <nav aria-label="Page navigation"> <?php echo $users['pagination'];?> </nav> </div> </div> </div> </body> </html>
上記のコードでは、主に Paginator コントロールと Pagination クラスを使用します。 Paginator コントロールでは、コントロールのレイアウト、スタイルなどを設定できます。 Pagination クラスでは、show() メソッドを呼び出して、Paginator コントロールで使用するページネーション HTML コードを取得しました。同時に、foreach ループで、Model レイヤーからテーブルに転送された $rows 配列を表示します。
3. ThinkPHP ページングに関するよくある質問
Model レイヤーの getPageUsers メソッドでは、次のようにページあたりのデフォルトのレコード数を設定できます。
public function getPageUsers($page=1,$rows=10){ ... }
このうち、$rows はデフォルトのレコード数を表します。ページごとに、ビュー レイヤーにパラメーターを直接渡して、ページごとのレコード数を変更することもできます。
ビュー レイヤーで、ユーザーが最初のページをクリックすると、$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 コードを取得し、それを現在のページの「最初のページ」に置き換えます。このようにして、任意のページで「最初のページ」ボタンをクリックすると、データの最初のページに戻ることができます。
通常のページングの場合、ページがめくるたびにページ全体を再リクエストする必要がありますが、これは大規模なデータ セットの場合は明らかに非効率であるため、リフレッシュ不要のページングを実現するために 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 サイトの他の関連記事を参照してください。