Laravel 5.1 分页功能实现及自定义分页样式的例子

Laravel还为分页提供了多种实现方式,既可以基于查询构建器实现分页,也可以基于Eloquent模型进行分页,最终生成的分页视图还兼容Bootstrap CSS样式。讲到这里,估计很多人已经跃跃欲试了,想要迫不及待的看看Laravel到底是如何实现分页的,下面让我们一一道来:

1、使用查询构建器实现分页

简单分页

我们可以在查询构建器上简单调用simplePaginate方法,从而实现类似WordPress默认分页的样式(上一页、下一页这种简单的分页链接):

class PostController extends Controller
{
    /**
     * 显示文章列表.
     *
     * @return Response
     */
    public function index()
    {
        //使用查询构建器进行简单分页,每页显示3条记录
        $posts = DB::table('posts')->simplePaginate(3);
        return view('post.index',['posts'=>$posts]);
    }

    ...
}

就是这么简单,不需要传入页码,不需要传入总数,只是简单调用simplePaginate方法并传入每页显示数目,如果你想指定查询的字段,页码参数,完整的simplePaginate定义如下:

simplePaginate($perPage = null, $columns = ['*'], $pageName = 'page')

其中$perPage表示每页显示数目,$columns表示查询字段,$pageName表示页码名称,页码名称默认为page。

要查看页面显示效果,还需要定义相应的视图文件。

分页Blade视图

接下来我们创建文章列表页视图文件resources/views/post/index.blade.php:

<div class="container">
    <ul>
    @foreach ($posts as $post)
        <li>{{ $post->title }}</li>
    @endforeach
    </ul>
</div>

{!! $posts->render() !!}

保存新建的文件之后,去浏览器访问http://laravel.app:8000/post,页面显示如下:

点击下一页链接“»”,页面跳转到http://laravel.app:8000/post/?page=2并显示如下内容:

当然,我们通常见到的分页样式更多是这样的:

那么,这又如何实现呢?

别担心,Laravel已经为我们准备好了相应的实现方法。

实现带页码的分页

要实现上述带页码的分页样式,只需调用查询构建器上的paginate方法即可:

$posts = DB::table('posts')->paginate(3);

再次访问http://laravel.app:8000/post,页面显示如下:

显然,分页已经带上页码了,当然,这里我们没有引入Bootstrap,所以样式丑了点。不过学院君会在下月推出的博客项目中让大家彻底告别这种样式,所以暂时忍一忍啦。

同理,我们也可以传递更多参数到paginate方法,paginate完整参数定义如下:

paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null)

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

2、使用Eloquent模型实现分页

除了查询构建器之外,Laravel还支持在Eloquent模型上进行分页,当然我们在之前Eloquent相关教程中已经提到过,其实Eloquent模型本质上也是个查询构建器,所以在Eloquent模型中实现分页实际上调用的还是查询构建器上的那些方法。

因此,如果要实现简单分页,我们可以像这样操作:

$posts = Post::simplePaginate(3);

要实现带页码的分页,调用代码如下:

$posts = Post::paginate(3);

当然,我们可以在Eloquent模型添加更多查询条件:

$posts = Post::where('views','>',0)->paginate(3);

3、自定义分页实现

通过查看simplePaginate和paginate两个函数的底层实现,可以发现这两个函数分别返回Illuminate\Pagination\Paginator和Illuminate\Pagination\LengthAwarePaginator,因此,如果我们想要实现自定义分页功能,需要传入自定义参数到这两个类中。当然,很多时候这两个类已经可以满足我们绝大部分需求,更多的改动可能还是在分页样式上,比如我们想要修改链接的显示、以及在分页链接中加上“首页”、“最后一页”这样的链接等。Laravel自带的分页链接样式由
Illuminate\Pagination\BootstrapThreePresenter的render方法生成,要想自定义分页样式,需要在这些类和方法上做文章。

时间: 2024-11-16 17:28:49

Laravel 5.1 分页功能实现及自定义分页样式的例子的相关文章

GridView分页的实现以及自定义分页样式功能实例

本文为大家详细介绍下GridView实现分页并自定义的分页样式,具体示例代码如下,有想学习的朋友可以参考下哈,希望对大家有所帮助   GridView分页的实现 复制代码 代码如下: 要在GridView中加入 //实现分页 AllowPaging="true" //一页数据10行 PageSize="10" // 分页时触发的事件 OnPageIndexChanging="gvwDesignationName_PageIndexChanging"

GridView分页的实现以及自定义分页样式功能实例_实用技巧

GridView分页的实现 复制代码 代码如下: 要在GridView中加入 //实现分页 AllowPaging="true" //一页数据10行 PageSize="10" // 分页时触发的事件 OnPageIndexChanging="gvwDesignationName_PageIndexChanging" 在服务器事件里 复制代码 代码如下: protectedvoid gvwDesignationName_PageIndexChan

ASP.NET中利用DataGrid的自定义分页功能

asp.net|datagrid|分页 ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页 ASP.Net中的DataGrid有内置分页功能, 但是它的默认的分页方式效率是很低的,特别是在数据量很大的时候,用它内置的分页功能几乎是不可能的事,因为它会把所有的数据从数据库读出来再进行分页, 这种只选取了一小部分而丢掉大部分的方法是不可去取的. 在最进的一个项目中因为一个管理页面要管理的数据量非常大,所以必须分页显示,并且不能用DataGrid的内置分页功能,于是自己实现

完善自定义分页控件

上一篇写了一个简单的自定义分页控件,当时写的不够完善,不能自定义控件的样式.现在完善了,望同 大家共同探讨. 现在已经在网上发布的分页控件特别多,而且大多都功能特别强,但是之所以选择自己写,主要是因为自 己写可以根据自己的要求来设计,不用的功能就功能免了. 本控件可以自定义样式,而且传入的参数和其它常用的分页控件差不多,记录总数和一页的数量,是否自 定义样式,当页面数量特别多的时候,可以在分页信息栏中显示前几页和后几页. 具体代码如下: using System;using System.Col

DataGrid自定义分页

datagrid|分页 ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页 ASP.Net中的DataGrid有内置分页功能, 但是它的默认的分页方式效率是很低的,特别是在数据量很大的时候,用它内置的分页功能几乎是不可能的事,因为它会把所有的数据从数据库读出来再进行分页, 这种只选取了一小部分而丢掉大部分的方法是不可去取的. 在最进的一个项目中因为一个管理页面要管理的数据量非常大,所以必须分页显示,并且不能用DataGrid的内置分页功能,于是自己实现分页. 下面介绍

ASP.NET 2.0数据教程之二十六:排序自定义分页数据

返回"ASP.NET 2.0数据教程目录" 导言 和默认翻页方式相比,自定义分页能提高几个数量级的效率.当 我们的需要对大量数据分页的时候就需要考虑自定义分页,然而实现自定义分页 相比默认分页需要做更多工作.对于排序自定义分页数据也是这样,在本教程中 我们就会扩展前面的例子来实现自定义分页数据的排序. 注意:既然本教 程是基于前一个的,因此我们需要把前面教程示例页面EfficientPaging.aspx的 <asp:Content>元素中的代码复制到本教程SortPara

在ASP.NET 2.0中操作数据之二十六:排序自定义分页数据_自学过程

导言 和默认翻页方式相比,自定义分页能提高几个数量级的效率.当我们的需要对大量数据分页的时候就需要考虑自定义分页,然而实现自定义分页相比默认分页需要做更多工作.对于排序自定义分页数据也是这样,在本教程中我们就会扩展前面的例子来实现自定义分页数据的排序. 注意:既然本教程是基于前一个的,因此我们需要把前面教程示例页面EfficientPaging.aspx的<asp:Content>元素中的代码复制到本教程SortParameter.aspx示例页面中.关于如何进行这样的复制操作请参看为删除数据

php如何实现分页功能

上星期工作中,遇到要处理一段分页的代码!以前是写的很熟练的,可能是懒散的太久了!感觉忘的差不多了. 有的知识就是太久不用也会忘记的很快啊!所以经常复习一下以前的知识也是很重要的.所以特地整理出一下分页代码! 效果如上图:在发表框点一下弹出一个框,首先判断用户是否登录,没有登录就弹出登录框,已登录就弹出输入框,输入留言内容,姓名和手机号. 当你输入好内容后会在下面显示你的留言内容,前三个为用户最新的留言排序,从第四个起按点赞的数量进行排序. <!--视图层--> <?php $pageIn

ASP.NET 2.0在SQL Server 2005上自定义分页

出处:http://aspnet.4guysfromrolla.com/demos/printPage.aspx?path=/articles/031506-1.aspx 介绍 web开发中普遍会用页面来显示数据.比起整页显示一张报表或者一张数据表的数据给用户,开发者经常用到的是分页显示,每页只显示部分数据,用翻页来控制.在ASPV.NET 1.X里,DataGrid控件使翻页显示变得简单-只需要把属性AllowPaging设置为"true",并在PageIndexChanged事件中