分頁(yè)
分頁(yè)實(shí)現(xiàn)
版本 | 新增功能 |
---|---|
5.0.5 |
分頁(yè)方法返回think\Paginator 對(duì)象(用法不變) |
5.0.1 | 支持第二個(gè)參數(shù)直接傳入總記錄數(shù) |
ThinkPHP5.0
內(nèi)置了分頁(yè)實(shí)現(xiàn),要給數(shù)據(jù)添加分頁(yè)輸出功能在5.0
變得非常簡(jiǎn)單,可以直接在Db
類查詢的時(shí)候調(diào)用paginate
方法:
// 查詢狀態(tài)為1的用戶數(shù)據(jù) 并且每頁(yè)顯示10條數(shù)據(jù)
$list = Db::name('user')->where('status',1)->paginate(10);
// 把分頁(yè)數(shù)據(jù)賦值給模板變量list
$this->assign('list', $list);
// 渲染模板輸出
return $this->fetch();
也可以改成模型的分頁(yè)查詢代碼:
// 查詢狀態(tài)為1的用戶數(shù)據(jù) 并且每頁(yè)顯示10條數(shù)據(jù)
$list = User::where('status',1)->paginate(10);
// 把分頁(yè)數(shù)據(jù)賦值給模板變量list
$this->assign('list', $list);
// 渲染模板輸出
return $this->fetch();
模板文件中分頁(yè)輸出代碼如下:
<div>
<ul>
{volist name='list' id='user'}
<li> {$user.nickname}</li>
{/volist}
</ul>
</div>
{$list->render()}
也可以單獨(dú)賦值分頁(yè)輸出的模板變量
// 查詢狀態(tài)為1的用戶數(shù)據(jù) 并且每頁(yè)顯示10條數(shù)據(jù)
$list = User::where('status',1)->paginate(10);
// 獲取分頁(yè)顯示
$page = $list->render();
// 模板變量賦值
$this->assign('list', $list);
$this->assign('page', $page);
// 渲染模板輸出
return $this->fetch();
模板文件中分頁(yè)輸出代碼如下:
<div>
<ul>
{volist name='list' id='user'}
<li> {$user.nickname}</li>
{/volist}
</ul>
</div>
{$page}
默認(rèn)情況下,生成的分頁(yè)輸出是完整分頁(yè)功能,帶總分頁(yè)數(shù)據(jù)和上下頁(yè)碼,分頁(yè)樣式只需要通過(guò)樣式修改即可,完整分頁(yè)默認(rèn)生成的分頁(yè)輸出代碼為:
<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>
傳入總記錄數(shù)( V5.0.1
)
V5.0.1
版本開(kāi)始,支持傳入總記錄數(shù)而不會(huì)自動(dòng)進(jìn)行總數(shù)計(jì)算,例如:
// 查詢狀態(tài)為1的用戶數(shù)據(jù) 并且每頁(yè)顯示10條數(shù)據(jù) 總記錄數(shù)為1000
$list = User::where('status',1)->paginate(10,1000);
// 獲取分頁(yè)顯示
$page = $list->render();
// 模板變量賦值
$this->assign('list', $list);
$this->assign('page', $page);
// 渲染模板輸出
return $this->fetch();
分頁(yè)后數(shù)據(jù)處理 (V5.0.9
)
V5.0.9
版本開(kāi)始 支持分頁(yè)類后數(shù)據(jù)直接each
遍歷處理,方便修改分頁(yè)后的數(shù)據(jù),而不是只能通過(guò)模型的獲取器來(lái)補(bǔ)充字段。
$list = User::where('status',1)->paginate()->each(function($item, $key){
$item->nickname = 'think';
});
如果是Db類操作分頁(yè)數(shù)據(jù)的話,each方法的閉包函數(shù)中需要使用返回值,例如:
$list = Db::name('user')->where('status',1)->paginate()->each(function($item, $key){
$item['nickname'] = 'think';
return $item;
});
簡(jiǎn)潔分頁(yè)
如果你僅僅需要輸出一個(gè) 僅僅只有上下頁(yè)的分頁(yè)輸出,可以使用下面的簡(jiǎn)潔分頁(yè)代碼:
// 查詢狀態(tài)為1的用戶數(shù)據(jù) 并且每頁(yè)顯示10條數(shù)據(jù)
$list = User::where('status',1)->paginate(10,true);
// 把分頁(yè)數(shù)據(jù)賦值給模板變量list
$this->assign('list', $list);
// 渲染模板輸出
return $this->fetch();
簡(jiǎn)潔分頁(yè)模式的輸出代碼為:
<ul class="pager">
<li><a href="?page=1">«</a></li>
<li class="disabled"><span>»</span></li>
</ul>
由于簡(jiǎn)潔分頁(yè)模式不需要查詢總數(shù)據(jù)數(shù),因此可以提高查詢性能。
分頁(yè)參數(shù)
主要的分頁(yè)參數(shù)如下:
參數(shù) | 描述 |
---|---|
list_rows | 每頁(yè)數(shù)量 |
page | 當(dāng)前頁(yè) |
path | url路徑 |
query | url額外參數(shù) |
fragment | url錨點(diǎn) |
var_page | 分頁(yè)變量 |
type | 分頁(yè)類名 |
分頁(yè)參數(shù)的設(shè)置方式有兩種,第一種是在配置文件中定義,例如:
//分頁(yè)配置
'paginate' => [
'type' => 'bootstrap',
'var_page' => 'page',
],
type屬性支持命名空間,例如:
//分頁(yè)配置
'paginate' => [
'type' => '\org\page\bootstrap',
'var_page' => 'page',
],
也可以在調(diào)用分頁(yè)方法的時(shí)候傳入,例如:
$list = Db::name('user')->where('status',1)->paginate(10,true,[
'type' => 'bootstrap',
'var_page' => 'page',
]);