博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
laravel5自定义分页
阅读量:7049 次
发布时间:2019-06-28

本文共 3865 字,大约阅读时间需要 12 分钟。

laravel5分页处理与laravel4略有区别,laravel5提供了更方便的处理方式,可以方便满足不同分页展示。


laravel4自定义分页:



laravel分页处理有分两个入口,即两个处理对象:

DB操作分页       Illuminate\Database\Query\Builder       

ORM操作分页   Illuminate\Database\Eloquent\Builder  



DB操作分页代码:


标准分页展示:  上一页  页号  下一页


简单分页展示:  上一页  下一页


ORM操作分页代码:

标准分页展示:  上一页  页号  下一页



简单分页展示:  上一页  下一页

从代码中可以看出,分页会返回两种分页处理对象:

简单分页   Illuminate\Pagination\Paginator

标准分页   Illuminate\Pagination\LengthAwarePaginator


这两个对象都继承于  Illuminate\Pagination\AbstractPaginator


文档中也说明了分页展示调用方法:

1
{!!
$paginator
->render()!!}


可以查看下 render  函数的处理代码:

标准分页展示:  上一页  页号  下一页


简单分页展示:  上一页  下一页


到这里可以看出,分页展示有三种方式处理:

  1. 给render追加自定义继承于Illuminate\Contracts\Pagination\Presenter的对象。

  2. 使用框架默认对象,即不传参数,有自定义需求可修改对应展示对象。

  3. 添加全局$presenterResolver静态处理回调。


从通用性来看,第1和第3是可以随意扩展,第2条却不得不去修改框架代码,以获取自定义需求。


第1条处理方式 需要自己写分页展示处理对象,可以直接继承于框架预设的两个对象:

简单分页   Illuminate\Pagination\Paginator

标准分页   Illuminate\Pagination\LengthAwarePaginator

覆盖相关函数即可实现自定义。


或者自定对象中直接操作视图:

定义处理类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*
 
* 自定义分页处理
 
*/
use 
Illuminate\Contracts\Pagination\Paginator 
as 
PaginatorContract;
class 
Page 
implements 
Illuminate\Contracts\Pagination\Presenter {
    
//分页对象
    
protected 
$paginator
;
    
//分页展示视图
    
protected 
$view
;
    
//初始化处理
    
public 
function 
__construct(PaginatorContract 
$paginator
$view
) {
        
$this
->paginator = 
$paginator
;
        
$this
->view = 
$view
;
    
}
    
//是否可以够分页
    
public 
function 
hasPages() {
        
return 
$this
->paginator->hasPages();
    
}
    
/*
     
* 分页展示处理
     
*/
    
public 
function 
render() {
        
return 
view(
$this
->view, [
'paginator' 
=> 
$this
->paginator]);
    
}
}

分页视图,保存文件名:page.blade.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
php 
$size = 10; //页号显示个数  ?>
<
div
>
    
<
span
>共<
b
>{
{$paginator->total()}}</
b
>记录/行数<
b
>{
{$paginator->perPage()}}</
b
>/分<
b
>{
{$paginator->lastPage()}}</
b
>页</
span
>
    
@if($paginator->lastPage()>1)
    
<
ul 
class
=
"pagination"
>
        
<
li 
class="prev<?php if ($paginator->currentPage() == 1) { ?> disabled<?
php 
} ?>"><
a 
href="{
{$paginator->url(1)}}">首页</
a
></
li
>
        
<
li
<?php if ($paginator->currentPage() == 1) { ?> class="disabled"<?
php 
} ?>><
a 
href="{
{$paginator->previousPageUrl()}}">上一页</
a
></
li
>
        
@for($pageNum=max($paginator->currentPage()-$size/2,1),$length=0;$length<$size && $pageNum<=$paginator->lastPage();$length++,$pageNum++)
        
@if($paginator->currentPage()==$pageNum)
        
<
li 
class
=
"disabled"
><
a 
href
=
"javascript:void(0);" 
class
=
"current"
>{
{$pageNum}}</
a
></
li
>
        
@else
        
<
li
><
a 
href="{
{$paginator->url($pageNum)}}">{
{$pageNum}}</
a
></
li
>
        
@endif
        
@endfor
        
<
li 
style
=
"margin-left: 10px;"
>
            
<
input 
type
=
"text" 
value="{
{$paginator->currentPage()}}" size="3" onchange="this.value = Math.max(Math.min(parseInt(this.value.replace(/\D+/g, '')),'{
{$paginator->lastPage()}}'), 1)" style="width: 70px;display: inline-block;"/>
            
<
input 
type
=
"button" 
value
=
"转到" 
onclick="var text = this.previousSibling; while (text.nodeType != 1){text = text.previousSibling; }; text.onchange(); text.value != '{
{$paginator->currentPage()}}' && (location.href ='{
{$paginator->url(1)}}'.replace(/page=\d+/, 'page=' + text.value));"/>
        
</
li
>
        
<
li
<?php if ($paginator->lastPage() == $paginator->currentPage()) { ?> class="disabled"<?
php 
} ?>><
a 
href="{
{$paginator->nextPageUrl()}}">下一页</
a
></
li
>
        
<
li 
class="next<?php if ($paginator->lastPage() == $paginator->currentPage()) { ?> disabled<?
php 
} ?>"><
a 
href="{
{$paginator->url($paginator->lastPage())}}">尾页</
a
></
li
>
    
</
ul
>
    
@endif
</
div
>


视图调用

1
{!!
$paginator
->render(
new 
Page(
$paginator
,
'page'
))!!}


第3条处理方式 可以使用匿名函数或指定调用类与方法,只要能满足 call_user_func 方法的参数结构即可。

最方便的就是使用匿名函数可以直接省去第1条Page类可直接在 App\Http\Controllers\Controller 增加构造函数及代码:

1
2
3
4
5
6
public 
function 
__construct() {
    
//分页定义
    
Paginator::presenter(
function
(
$paginator
) {
      
return 
view(
'page'
, compact(
'paginator'
));
    
});
}

这样调用方法比第1条更方便:

1
{!!
$paginator
->render()!!}
本文转自  ttlxihuan    51CTO博客,原文链接:http://blog.51cto.com/php2012web/1856687

转载地址:http://wlkol.baihongyu.com/

你可能感兴趣的文章
TensorFlow高层次机器学习API (tf.contrib.learn)
查看>>
SharePoint 2013 Farm 安装指南——构建一个双层SharePoint Farm
查看>>
使用dropwizard(5)--加入swagger
查看>>
MonoRail学习笔记十:Controller和Url的对应关系
查看>>
Oracle存储过程实现返回多个结果集 在构造函数方法中使用 dataset
查看>>
【SQL 代码】SQL 语句记录(不定时更新)
查看>>
[Java 基础]控制语句
查看>>
Qt之对话框设计——可扩展对话框
查看>>
倒排索引优化 - 跳表求交集 空间换时间 贪心
查看>>
Java正则速成秘籍(一)之招式篇
查看>>
Java程序性能优化14
查看>>
Kudu安装前的建议说明(博主推荐)
查看>>
设备树
查看>>
使用WindowManager添加您自己的自定义视图
查看>>
Linux内核态抢占机制分析【转】
查看>>
ASP.NET2.0中用ICallbackEventHandler实现客户端与服务器端异步交互
查看>>
关于JFace中的TableViewer和TreeViewer中的
查看>>
Hadoop MapReduce概念学习系列之十分钟看透MapReduce(十一)
查看>>
[C#]C#补习——类型和操作符—PART2
查看>>
链表常见的问题【转】
查看>>