ページングの原理と実装
ページング実装
ThinkPHP にはページング実装が組み込まれています。データにページング出力関数を追加するのは非常に簡単です。実行中に直接呼び出すことができます。 DB クラスのクエリ ページ分割メソッド:
// 查询状态为1的用户数据 并且每页显示10条数据 $list = Db::name('user')->where('status',1)->paginate(10); // 把分页数据赋值给模板变量list View::assign('list', $list); // 渲染模板输出 return View::fetch();
は、モデルのページング クエリ コード:
// 查询状态为1的用户数据 并且每页显示10条数据 $list = User::where('status',1)->paginate(10); // 把分页数据赋值给模板变量list View::assign('list', $list); // 渲染模板输出 return View::fetch();
に変更することもできます。テンプレート ファイル内のページング出力コードは次のとおりです:
<div> <ul> {volist name='list' id='user'} <li> {$user.nickname}</li> {/volist} </ul> </div> {$list|raw}
ページング出力テンプレートに別の値を割り当てることもできます。変数
// 查询状态为1的用户数据 并且每页显示10条数据 $list = User::where('status',1)->paginate(10); // 获取分页显示 $page = $list->render(); // 模板变量赋值 View::assign('list', $list); View::assign('page', $page); // 渲染模板输出 return View::fetch();
テンプレート ファイル内のページング出力コードは次のとおりです。
<div> <ul> {volist name='list' id='user'} <li> {$user.nickname}</li> {/volist} </ul> </div> {$page|raw}
デフォルトでは、生成されるページング出力は完全なページングです。合計ページング データと上位ページ番号と下位ページ番号を含む関数。ページング スタイルはスタイルを渡すだけです。変更するだけです。完全なページングによって生成されるデフォルトのページング出力コードは次のとおりです:
<ul class="pagination"> <li><a href="?page=1">«</a></li> <li><a href="?page=1">1</a></li> <li class="active"><span>2</span></li> <li class="disabled"><span>»</span></li> </ul>
合計データを個別に取得するには、
// 查询状态为1的用户数据 并且每页显示10条数据 $list = User::where('status',1)->paginate(10); // 获取总记录数 $count = $list->total(); // 把分页数据赋值给模板变量list View::assign('list', $list); // 渲染模板输出 return View::fetch();
を使用してレコードの合計数を渡すことができます
合計を自動的に計算せずにレコードの合計数を渡すことをサポートします。たとえば、 :
// 查询状态为1的用户数据 并且每页显示10条数据 总记录数为1000 $list = User::where('status',1)->paginate(10,1000); // 获取分页显示 $page = $list->render(); // 模板变量赋值 View::assign('list', $list); View::assign('page', $page); // 渲染模板输出 return View::fetch();
UNION クエリおよび一部の特殊な複雑なクエリの場合は、このメソッドを使用して、最初にレコードの総数を個別にクエリしてから、ページング メソッド
## を渡すことをお勧めします。 #ページング後のデータ処理
$list = User::where('status',1)->paginate()->each(function($item, $key){ $item->nickname = 'think'; });Db クラスがページング データを操作する場合、戻り値は各メソッドのクロージャー関数で使用する必要があります。例:
$list = Db::name('user')->where('status',1)->paginate()->each(function($item, $key){ $item['nickname'] = 'think'; return $item; });
単純なページング
// 查询状态为1的用户数据 并且每页显示10条数据 $list = User::where('status',1)->paginate(10, true); // 把分页数据赋值给模板变量list View::assign('list', $list); // 渲染模板输出 return View::fetch();簡潔なページング モードの出力コードは次のとおりです。
<ul class="pager"> <li><a href="?page=1">«</a></li> <li class="disabled"><span>»</span></li> </ul>シンプルさのため、ページング モードではデータの総数をクエリする必要がないため、クエリのパフォーマンスを向上させることができます。
ページング パラメータ
主なページング パラメータは次のとおりです。説明 | |
---|---|
ページあたりの数量 | |
現在のページ | |
url パス | |
url 追加パラメータ | |
URLアンカー | |
ページ変数 |
ページング パラメータの設定は、ページング メソッドを呼び出すときに渡すことができます。例:
$list = Db::name('user')->where('status',1)->paginate([ 'list_rows'=> 20, 'var_page' => 'page', ]);
クエリを渡す必要がある場合ページング時の条件を使用すると、クエリ パラメータを使用して追加のクエリ パラメータを結合できます
カスタム ページング クラス
ページングをカスタマイズする必要がある場合は、ページングドライバー。
次に、provider.php 定義ファイルで再バインドします
return [ 'think\Paginator' => 'app\common\Bootstrap' ];