ページングの原理と実装


ページング実装

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">&laquo;</a></li>
<li><a href="?page=1">1</a></li>
<li class="active"><span>2</span></li>
<li class="disabled"><span>&raquo;</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">&laquo;</a></li>
<li class="disabled"><span>&raquo;</span></li>
</ul>

シンプルさのため、ページング モードではデータの総数をクエリする必要がないため、クエリのパフォーマンスを向上させることができます。

ページング パラメータ

主なページング パラメータは次のとおりです。


# # パラメータlist_rowsページパスクエリ#フラグメントvar_page
説明
ページあたりの数量
現在のページ
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'
];