pager()的问题

#1 djfbob

public function pager($page, $pageSize = 10, $scope = 10, $total){
                $this->page = null;
                if($total > $pageSize){
                        $total_page = ceil($total / $pageSize);
                        $page = min(intval(max($page, 1)), $total);  
                        $this->page = array(
                                'total_count' => $total,
                                'page_size'   => $pageSize,
                                'total_page'  => $total_page,
                                'first_page'  => 1,
                                'prev_page'   => ( ( 1 == $page ) ? 1 : ($page - 1) ),
                                'next_page'   => ( ( $page == $total_page ) ? $total_page : ($page + 1)),
                                'last_page'   => $total_page,
                                'current_page'=> $page,
                                'all_pages'   => array(),
                                'offset'      => ($page - 1) * $pageSize,
                                'limit'       => $pageSize,
                        );
                        $scope = (int)$scope;
                        if($total_page <= $scope ){
                                $this->page['all_pages'] = range(1, $total_page);
                        }elseif( $page <= $scope/2) {
                                $this->page['all_pages'] = range(1, $scope);
                        }elseif( $page <= $total_page - $scope/2 ){
                                $right = $page + (int)($scope/2);
                                $this->page['all_pages'] = range($right-$scope+1, $right);
                        }else{
                                $this->page['all_pages'] = range($total_page-$scope+1, $total_page);
                        }
                }
                return $this->page;
        }


2018-09-15 11:51:41

#2 djfbob

$page = min(intval(max($page, 1)), $total); // 这里是不是有个bug,应该改成 $page = min(intval(max($page, 1)), $total_page);

2018-09-15 11:52:21

#3 jake

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-09-15 22:15:28

#4 djfbob

感谢老大的指教,但是我还是有点问疑问,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-09-16 12:56:58

#5 jake

有点绕了,我以为是3.1旧版的~~~

是我搞错了。https://github.com/SpeedPHP/manual/blob/master/%E6%95%B0%E6%8D%AE%E6%93%8D%E4%BD%9C-%E5%88%86%E9%A1%B5.md

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

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

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

--------

感谢指出,谢谢哦。

2018-09-17 08:29:05

#6 jake

已修正https://github.com/SpeedPHP/speed/commit/9eeff4dfb932e7ab333853f573dd6133522ba84b

:handshake

2018-09-17 08:39:21