thinkphp5带条件分页

叁歲伎倆 2023-10-18 18:07 191阅读 0赞

一、问题

ThinkPHP5 由于分页引擎和之前的版本完全是重构了,今天在用分页的时候突然发现,之前很简便的带条件分页竟然不好用了。

之前只要是get传递的参数,在分页之后在 ?page=x 参数的补充的时候会自动进行url的获取。

  • 我之前使用的是 /id/123/key/xxx/?page=1 这样的形式的url

但是TP5无法做到。

二、解决

最坑的是文档中没有提到这一点。。。

我是使用 paginate() 函数,这个函数在 Db 或者是 Model 上都是适用的,因此对于使用 Db 还是 Model 没有什么大的影响。

关键在于 paginate() 是有三个参数:

  • 第一个参数是 $listRows [int],也就是当前的页数
  • 第二个参数是 $simple [boolean], 是否简洁模式或者总记录数
  • 第三个参数是 $config [array],配置参数

而第三个参数中是最关键的:

  1. /**
  2. * 分页查询
  3. * @param int|array $listRows 每页数量 数组表示配置参数
  4. * @param int|bool $simple 是否简洁模式或者总记录数
  5. * @param array $config 配置参数
  6. * page:当前页,
  7. * path:url路径,
  8. * query:url额外参数,
  9. * fragment:url锚点,
  10. * var_page:分页变量,
  11. * list_rows:每页数量
  12. * type:分页类名
  13. * @return \think\Paginator
  14. * @throws DbException
  15. */
  16. public function paginate($listRows = null, $simple = false, $config = []){}

解决办法就是利用 $config 中的 query 参数,来设置额外变量

三、代码

举个例子:

  • 查询的时候,使用的条件是 status = 1; 因此我传递的参数是 xxx.html?status = 1;
  • url中有一个 type 参数是额外的,不用再数据库查询中,但是url都需要这个参数 xxx.html?status=1&type=1

    $status = $_GET[‘status’]; // 为了演示 直接用$_GET
    // 构造查询条件
    $where [‘’status] = $status;
    // 构造额外的条件
    $pageParam=[

    1. 'status' => $status,
    2. 'type' => $type

    ];
    // 进行分页查询
    $list = $Post->where($where)->paginate(10,false,array(‘query’=>$pageParam));
    // 获取page
    $page = $postListInfo->render();
    $this->assign(‘postListInfo’,$postListInfo);
    $this->assign(‘page’, $page);

四、效果

可以看到,当点击分页页码的时候,会有额外的url参数出现,从而能够继续按照相关的条件逻辑进行分页。

QQ截图20170602183946.jpg

来源:http://www.ptbird.cn/thinkphp5-key-pagination.html

发表评论

表情:
评论列表 (有 0 条评论,191人围观)

还没有评论,来说两句吧...

相关阅读

    相关 thinkphp5条件

    一、问题 ThinkPHP5 由于分页引擎和之前的版本完全是重构了,今天在用分页的时候突然发现,之前很简便的带条件分页竟然不好用了。 之前只要是get传递的参数,在分页

    相关 修改 thinkphp5 样式

    前言 现在的项目的分页样式太丑了,一直也放着也没有去管,最近实在是看不下去了,打算好好看看这块,找了很多,也都比较模糊,于是根据 [ 官方手册][Link 1] 打算搞一