laravel 大将之 分页 模块

laravel 大将之 分页 模块_php_web-itnose

首页
asp
php
javascript
iis
apache
html/css
coldfusion
ajax
vbscript
cgi
xml/xsl
跨浏览器开发
ruby/rails
程序员
html5
jquery
seo
jboss
json
angularjs
markdown
nginx
thinkphp
yii
pageadmin
extjs
wampserver
kendo ui
coffeescript
gulp
ecmascript
bootstrap

itnose首页 > web > php >

laravel 大将之 分页 模块

2017-06-13 14:45

简介

分页模块的基本使用有两种:一种是基于查询构建器或eloquent模型,调用paginate方法;另一种是手动创建分页器;

laravel框架的分页器不仅实现了数据的分页,而且支持生成bootstrap的分页框,如下图所示

使用
基于查询构建器或eloquent模型

从user表获取数据,每页16条,可以这样写

$users = db::table(‘user’)->paginate(16);
// 或
$users = user::paginate(16);

这时的$user是illuminate\pagination\lengthawarepaginator实例;这里没有传递当前页的原因是,如果不传递,会从$request请求获取当前页;paginate方法完整参数定义如下:

paginate($perpage = null, $columns = [‘*’], $pagename = ‘page’, $page = null)

其中 $perpage 代表每页显示数目, $columns 代表查询字段, $pagename 代表页码名称, $page 代表第几页。

同理,也可以获取另一种分页,简单分页

$users = db::table(‘user’)->simplepaginate(16);
// 或
$users = user::simplepaginate(16);

这时的$user是illuminate\pagination\paginator实例;

要想在页面呈现分页器的小方块, 只要在blade.php 中书写

{!! $users->render() !!}
手动创建

通过看看laravel的database是怎么实现创建分页器,更好地学会使用手动创建;先看看paginate方法,

public function paginate($perpage = null, $columns = [‘*’], $pagename = ‘page’, $page = null)
{
// 获取当前页数
$page = $page ?: paginator::resolvecurrentpage($pagename);
// 获取每页的数量
$perpage = $perpage ?: $this->model->getperpage();
// collection类,存放当前页的数据记录
$results = ($total = $this->tobase()->getcountforpagination())
? $this->forpage($page, $perpage)->get($columns)
: $this->model->newcollection();
return new lengthawarepaginator($results, $total, $perpage, $page, [
// 当前页面的 url
‘path’ => paginator::resolvecurrentpath(),
‘pagename’ => $pagename,
]);
}

再看看simplepaginate方法

public function simplepaginate($perpage = null, $columns = [‘*’], $pagename = ‘page’, $page = null)
{
// 获取当前页数
$page = $page ?: paginator::resolvecurrentpage($pagename);
// 获取每页的数量
$perpage = $perpage ?: $this->model->getperpage();
// 调用 database 模块当前类的方法,获取当前页的数据;
// 下面这个语句只是设置查询条件,get 方法调用时才是真正去获取
$this->skip(($page – 1) * $perpage)->take($perpage + 1);
return new paginator($this->get($columns), $perpage, $page, [
// 当前页面的 url
‘path’ => paginator::resolvecurrentpath(),
‘pagename’ => $pagename,
]);
}
看看源代码
服务提供者 serviceprovider

boot方法

public function boot()
{
// 注册包视图
$this->loadviewsfrom(__dir__.’/resources/views’, ‘pagination’);
// 如果程序是在命令行下运行,则将模块内的`resources/views`文件夹下的文件
// 发布一份到项目的`views/vendor/pagination`文件夹;
// publishes 方法的第二个参数是 group 组;
if ($this->app->runninginconsole()) {
$this->publishes([
__dir__.’/resources/views’ => $this->app->resourcepath(‘views/vendor/pagination’),
], ‘laravel-pagination’);
}
}

register方法

public function register()
{
// 绑定 view 视图解析器
paginator::viewfactoryresolver(function () {
return $this->app[‘view’];
});
// 绑定 url 路径解析器,返回当前 url
paginator::currentpathresolver(function () {
return $this->app[‘request’]->url();
});
// 绑定 当前页 解析器,返回当前页
paginator::currentpageresolver(function ($pagename = ‘page’) {
$page = $this->app[‘request’]->input($pagename);
if (filter_var($page, filter_validate_int) !== false && (int) $page >= 1) {
return $page;
}
return 1;
});
}

分页器类有两个paginator和lengthawarepaginator,都继承了父类abstractpaginator;两者的主要区别主要在于render方法,也就是呈现的bootstrap风格的分页器不一样;

paginator的分页器,只有上一页和下一页的图标

lengthawarepaginator的分页器

相关搜索:
vb.net 模块
jsp分页
jsp 分页
.net 分页
hibernate 分页

相关文章

2017-02-23 23:16 laravel 分页seo浅谈
2016-12-20 09:53 laravel的搜索后分页
2016-02-06 08:43 [ laravel 5.2 文档 ] 服务 — 分页
2014-05-27 20:37 php laravel 框架之分页
2016-09-30 19:28 [ laravel 5.3 文档 ] 数据库 — 分页

更多相关文章>>

最新文章

2017-06-20 01:35 老铁们,有没有可能让php文件同时只能一个人访问
2017-06-20 01:35 怎么禁止图片直接通过url访问
2017-06-20 01:35 求救!启动wamp只能用本机访问,同局域网的其它设备访问不到!搞了大半天t-t
2017-06-19 15:35 nginx下的thinkphp问题
2017-06-19 15:35 php form 文件上传

更多最新文章>>

热门搜索

hibernate分页
linq 分页
linq分页
sqlserver 分页
c语言模块化编程
jsp分页技术
jsp分页查询
hibernate分页查询
hibernate分页代码
javaweb分页
asp.net 分页
linq分页查询
db2 分页
asp.net mvc 分页

京icp备14022385号-2

©2014 itnose软件编程教程 | 联系我们:email:twobrushes@126.com qq:35155868

Posted in 未分类

发表评论