博客列表 >laravel框架--文章列表及分页功能的实现--2019年11月23日

laravel框架--文章列表及分页功能的实现--2019年11月23日

Victor的博客
Victor的博客原创
2019年11月30日 19:30:241593浏览

参考课程内容,完成后台文章列表及分页功能

文章列表功能的实现:

数据分页最简单的是使用“查询构造器”或 Eloquent query 的 paginate 方法。
paginate 方法根据用户浏览的当前页码,自动设置恰当的偏移量 offset 和限制数 limit。
默认情况下,HTTP 请求中的 page 查询参数值被当作当前页的页码。Lavarel 自动侦测该值,并自动将其插入到分页器生成的链接中。
Lavarel5.8 无法高效地实现使用了 groupBy 语句的分页操作。如果需要使用对使用了 groupBy 的结果集分页,需要手工查询数据库并创建分页。

基本用法

  1. 指定要在每页显示 10 条数据:
    $users = DB::table('users')->paginate(10);
  2. 如果只在视图中简单地显示『下一页』和『上一页』链接,则可以使用 simplePaginate 方法执行更高效地查询。这在数据很多且不需要显示每页的页码时非常有用:
    $users = DB::table('users')->simplePaginate(10);
  3. 还可以对 Eloquent 查询结果进行分页:
    $users = App\User::paginate(10);
  4. 在 Eloquent 分页中使用 simplePaginate 方法:
    $users = User::where('votes', '>', 100)->simplePaginate(10);
  5. 在查询中可以设置诸如 where 语句的其它约束:
    $users = User::where('votes', '>', 100)->paginate(10);
  6. 手动创建分页可以通过创建 Illuminate\Pagination\Paginator 或
    Illuminate\Pagination\LengthAwarePaginator 实例来实现:
    Paginator 类不需要知道结果集的总数;
    LengthAwarePaginator 接受和 Paginator 几乎相同的参数;不过,它会计算结果集的总数。
    调用 paginate 方法时,会得到 Illuminate\Pagination\LengthAwarePaginator 实例。
    调用 simplePaginate 方法,得到的是Illuminate\Pagination\Paginator 实例
  7. 得到结果后,可以使用 Blade 显示数据、渲染分页链接:
    1. <div class="container">
    2. @foreach ($users as $user)
    3. {{ $user->name }}
    4. @endforeach
    5. </div>
    6. {{ $users->links() }}
  8. withPath 方法允许你在生成分页链接时自定义 URI:
    $users = App\User::paginate(15); $users->withPath('custom/url');
  9. 可以使用 appends 方法,向分页链接中添加查询参数:
    {{ $users->appends(['sort' => 'votes'])->links() }}
  10. 可以设定在分页器的 “窗口” 的每一侧显示多少个附加链接。默认情况下,主分页链接的每侧显示三个链接。可以使用 onEachSide 方法改变这个数值:
    {{ $users->onEachSide(5)->links() }}
  11. 默认情况下,渲染视图显示的分页链接样式与 Bootstrap CSS 框架兼容。如果你不使用
    Bootstrap,可以定制自己的视图来渲染这些链接:

    {{ $paginator->links('view.name', ['foo' => 'bar']) }}
  12. 自定义分页视图的最简方法是使用 vendor:publish 命令将它们输出到 resources/views/vendor 文件夹:
    php artisan vendor:publish --tag=laravel-pagination
  13. 如果想要定义不同的文件作为默认分页视图,需要在 AppServiceProvider 中使用分页器的 defaultView 和 defaultSimpleView 方法
    use Illuminate\Pagination\Paginator; public function boot() { Paginator::defaultView('view-name'); Paginator::defaultSimpleView('view-name'); }

    代码实现

    ```php
    <?php

namespace App\Http\Controllers\Admins;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

// 内容管理

class Content extends Controller {
// 内容列表
public function index(Request $req) {

  1. // 取出type对应的字段名称(与视图中的选项一一对应)
  2. $dbTitle = [0 => 'title', 1 => 'title', 2 => 'cate_id', 3 => 'author', 4 => 'status'];
  3. //查询参数:
  4. $type = (int) ($req->type);
  5. // $wd = ($type==4)?strtotime(trim($req->wd)):trim($req->wd);
  6. $wd = trim($req->wd);
  7. // 给分页组件传参数appends
  8. $appends = ['type' => $type, 'wd' => $wd];
  9. //搜索符合条件的数据
  10. $data = DB::table('xpcms_article')->where($dbTitle[$type], 'like', '%' . $wd . '%')->pages(2, $appends);
  11. // 构造data参数,传给视图
  12. $data['type'] = $type;
  13. $data['wd'] = $wd;
  14. return view('admins/content/index', $data);
  15. }
  16. public function add() {
  17. return view('admins/content/add', $data);
  18. }

}

```

实现效果

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议