php一个简单分页思路

4-22 3,196 views

要做的效果是如果当前页数小于7

1

要做的效果是如果当前页数大于7,

2

要做的效果是如果当前页数大于7,那么显示前3和后3条

3

1.mysql 代码 "SELECT * FROM table LIMIT 从第几个开始,取多少条";
2.假设每页取的条数是limit,数据总数为$nums,当前第几页是$sum(通过get获得);
所以要分的总页数可以算出来,有两种情况,一种是$nums%$limt 可以整除的,那么页数就是这个,另外一种情况就是假如不能整除,那么页数就要+1。采用php的向后取整函数ceil实现
3.页数已经有了,当总数小于7的时候for循环从1开始$pages结束
4.当总数大于7且当前页+3小于7的时候for循环从1开始到7结束
5.当总数大于7且当前页+3大于7并且当前页+3小于总页数的时候for循环从$sum-3开始到$sum+3结束
6.当总数大于7当前页+3大于总页数的时候for循环从$sum-3开始到$pages结束

下面是代码————>

model类
// 直播订单列表
    public function order_living(){
        $model = new OrderModel();
        //接取页数
        $index = Req::args("page") ? Req::args("page") : '1';

        //获取订单数量
        $nums = $model->get_counts();
        $limit = 9;//每页显示几条
        //调取分页函数
        $pageStr = $this->living_page($nums,$limit,$index);

        //调数据库 取数据
        $data = $model->get_all_data($index,$limit);

        $this->assign('page',$pageStr);
        $this->assign('data',$data);
        $this->redirect();
    }
分页函数
//分页函数
        //$nums,数据总数,$page,每页要分多少条,$sum 当前第几页
    private function living_page($nums,$page,$sum){
                //获得页数,总数据小于每页的条数,默认第一页,否则计算页数
        if($nums < $page){
            $pages = 1;
        }
        else{
            if ($nums%$page>0){
                $pages = ceil($nums/$page);
            }
            else {
                $pages = $nums/$page;
            }
        }

        $str="";
                //页数小于7 就只显示小于7的
        if($pages < 7)
        {
            for ($i=1; $i <= $pages; $i++) { 
                if ($i==$sum){
                    $str .="<span class='current'>$sum</span>";
                } else{
                    $str .= "<a href='/shop/order/order_living?page=$i'>$i</a>";
                }
            }
        }else{
                        //如果大于7,就加上首页and 末页
            $str = "<a href='/shop/order/order_living?page=1'>首页</a>";
            //如果当前页小于4的时候
            if($sum<=4){
                                //当前页大于1才显示上一页
                if($sum>1){
                    $str .= "<a href='/shop/order/order_living?page=".($sum-1)."'>上一页</a>";
                }

                for($i=1;$i<=7;$i++){
                    if ($i==$sum){
                        $str .="<span class='current'>$sum</span>";
                    } else{
                        $str .= "<a href='/shop/order/order_living?page=$i'>$i</a>";
                    }
                }
                $str .= "<a href='/shop/order/order_living?page=".($sum+1)."'>下一页</a>";
            }else if($sum+3<$pages){
                $str .= "<a href='/shop/order/order_living?page=".($sum-1)."'>上一页</a>";
                for($i=$sum-3;$i<=$sum+3;$i++){
                    if ($i==$sum){
                        $str .="<span class='current'>$sum</span>";
                    } else{
                        $str .= "<a href='/shop/order/order_living?page=$i'>$i</a>";
                    }
                }
                $str .= "<a href='/shop/order/order_living?page=".($sum+1)."'>下一页</a>";
            }else{
                $str .= "<a href='/shop/order/order_living?page=".($sum-1)."'>上一页</a>";
                for($i=$pages-6;$i<=$pages;$i++){
                    if ($i==$sum){
                        $str .="<span class='current'>$sum</span>";
                    } else{
                        $str .= "<a href='/shop/order/order_living?page=$i'>$i</a>";
                    }
                }
                $str .= "<a href='/shop/order/order_living?page=".($sum+1)."'>下一页</a>";
            }
            $str .= "<a href='/shop/order/order_living?page=".$pages."'>末页</a>";
        }

        $str .="   共$pages 页     ";
        $str .="   跳到第 <input type='text' style='width:24px;text-align:center' value='$sum'>页 <a id='go' href='javascript:void(0)'>确定</a>    ";
        return $str;
    }

解决 laravel-admin between datetime 假如数据库是时间戳int类型无法筛选。

laravel-admin默认的between->datetime(),查询默认是datetime类型,但是假如数据库是时间戳类型就会报错,又不想改底层文件的话可以试试加自定义筛选功能...

阅读全文

php解析英文语句,自动分解。

参考:https://www.php.net/manual/en/function.str-split.php 最近碰到一个问题,客户的英文地址太长,超出接口api字段长度,所以需要解析下语句分解发送。 ...

阅读全文

记录一个laravel-excel导出表格值为0导出excel显示空的解决方法。

最近在使用laravel-excel导出表格的时候,发现假如字段值为0的情况下,导出的excel中直接显示为空,找到一个方法解决,如下. 在laravel-excel的config配置中...

阅读全文

欢迎留言