请选择 进入手机版 | 继续访问电脑版

SpeedPHP框架

 找回密码
 注册成为新用户

QQ登录

只需一步,快速开始

查看: 894|回复: 5

pager()的问题

  [复制链接]
发表于 2018-9-15 11:51:41 | 显示全部楼层 |阅读模式
  1. public function pager($page, $pageSize = 10, $scope = 10, $total){
  2.                 $this->page = null;
  3.                 if($total > $pageSize){
  4.                         $total_page = ceil($total / $pageSize);
  5.                         $page = min(intval(max($page, 1)), $total);  
  6.                         $this->page = array(
  7.                                 'total_count' => $total,
  8.                                 'page_size'   => $pageSize,
  9.                                 'total_page'  => $total_page,
  10.                                 'first_page'  => 1,
  11.                                 'prev_page'   => ( ( 1 == $page ) ? 1 : ($page - 1) ),
  12.                                 'next_page'   => ( ( $page == $total_page ) ? $total_page : ($page + 1)),
  13.                                 'last_page'   => $total_page,
  14.                                 'current_page'=> $page,
  15.                                 'all_pages'   => array(),
  16.                                 'offset'      => ($page - 1) * $pageSize,
  17.                                 'limit'       => $pageSize,
  18.                         );
  19.                         $scope = (int)$scope;
  20.                         if($total_page <= $scope ){
  21.                                 $this->page['all_pages'] = range(1, $total_page);
  22.                         }elseif( $page <= $scope/2) {
  23.                                 $this->page['all_pages'] = range(1, $scope);
  24.                         }elseif( $page <= $total_page - $scope/2 ){
  25.                                 $right = $page + (int)($scope/2);
  26.                                 $this->page['all_pages'] = range($right-$scope+1, $right);
  27.                         }else{
  28.                                 $this->page['all_pages'] = range($total_page-$scope+1, $total_page);
  29.                         }
  30.                 }
  31.                 return $this->page;
  32.         }
复制代码


 楼主| 发表于 2018-9-15 11:52:21 | 显示全部楼层
$page = min(intval(max($page, 1)), $total); // 这里是不是有个bug,应该改成 $page = min(intval(max($page, 1)), $total_page);
发表于 2018-9-15 22:15:28 | 显示全部楼层
djfbob 发表于 2018-9-15 11:52
$page = min(intval(max($page, 1)), $total); // 这里是不是有个bug,应该改成 $page = min(intval(max($p ...

看过API手册吗? 这里的total参数,指的是最多显示几页,那么这句的意思是,如果当前页page比最多显示的页面数多,那么只取最多显示几页作为当前页码。

total_page是总数,如果按你说的方式,那么total参数是没有作用的了。
 楼主| 发表于 2018-9-16 12:56:58 | 显示全部楼层
感谢老大的指教,但是我还是有点问疑问,api手册里
pager()方法:产生分页数据。
用法:pager($page, $pageSize = 10, $scope = 10, $total)
参数:
$page,当前页码
$pageSize,每页多少条纪录,也就是分页大小
$scope,分页显示范围
$total,总纪录数
$total_page = ceil($total / $pageSize);   
$total_page应该是总页数吧
$page = min(intval(max($page, 1)), $total);

$page是当前页,$total是总记录数,当前页$page和总记录数$total取最小?不应该是当前页$page和总页数取最小么?


发表于 2018-9-17 08:29:05 | 显示全部楼层
有点绕了,我以为是3.1旧版的~~~

是我搞错了。https://github.com/SpeedPHP/manu ... 5%88%86%E9%A1%B5.md

新版的pager函数,最后一个参数,是记录有多少条的意思。

所以这里应该是你说的对,应该计算的,因为total参数这上已经使用了。
$page = min(intval(max($page, 1)), $total_page);

之前测试应该是边界值没到,所以没有测试出问题来~~~

--------

感谢指出,谢谢哦。

发表于 2018-9-17 08:39:21 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册成为新用户

本版积分规则

手机浏览|简版|中文PHP框架|开源协议|SpeedPHP.com ( 粤ICP备08008671号

GMT+8, 2020-2-27 22:55

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表