黄宽的blog

宁可十年不将军,不可一日不拱卒



php最简分页与laravel分页及Laravel手动分页

        在php中分页基本上要完成两步才能完成一个基本分页功能,第一,是分页的页码div的显示,点击第几页就需要在地址栏上传相应的参数做跳转和自身div的变化,第二,php脚本收到地址栏传过来的相应参数后,需要根据参数返回不同的数据。

        做一个最简单的第一步,需要四个参数,1数据总条数,2每页显示多少条,3当前多少页,4一共显示多少个页码。

        public function paginate($count, $limit, $curr, $num)
        {            //count,数据总条数10limit,每页显示多少条1,curr,当前页码数。num,显示页码为5几个            //显示几个页码            $maxnum = ceil($count / $limit);//计算出最大页码数10            $left = max($curr - floor($num / 2), 1);//计算出最左页码1            $right = min($left + $num - 1, $maxnum);//计算出最右边页码            $left = max($right - $num - 1, 1);//需重新计算出最左页码,当当前页码与最大页码数接近时,最右有偏差            for ($i = $left, $links = array(); $i <= $right; $i+=1) {//            $_GET['page'] = $i;            $links[$i] = http_build_query($_GET);        }

    }

        上面只是页码的显示,第二步是做数据的切割,一般而言是根据地址栏传过来的参数对数据库进行limit操作,最核心的一步根据当前页码取多少条数据,select....from.....limit($curr-1)*$limit,$limit.

        所有分页原理无非就是这样。

    用原生写大概思路就是这样,用框架写则简单得多,tp框架有个分页类,将此类引入再传两个参数一个是总条数一个是每页多少条,再将分页代码show()出来再赋值到模板上即可使用。当然我已经转Laravel了,所以今天主要重点是laravel的分页,laravel的分页很简单,封装得更加深入。可以直接使用orm查询将get()方法改为paginate(这里填写每页显示多少条),在模板里赋值{!! 查询出来的orm模型->links() !!},当然,网上大把教程。这是laravel的最简单的分页,但有时候我们得到的数据却并不是orm模型数据,而是数组类型的数据,那怎么使用laravel的分页呢,laravel已经提供了手动分页的类。原理还是一样,只不过数据结构不一样罢了,使用数据库可以用Limit,使用数组当然更好操作了,核心函数就是array_slice(),数组切割。laravel提供的手动分页类是LengthAwarePaginator,以下代码块为我在公司项目所写的手动分页。

public function myPage($arr,$request)
{    $perPage = 12;    if ($request->has('page')) {        $current_page = $request->page;        $current_page = $current_page <= 0 ? 1 :$current_page;    } else {        $current_page = 1;    }//以上获取地址栏传来的页码数    $item = array_slice($arr, ($current_page-1)*$perPage, $perPage); //数组切割    $total = count($arr);//数据总数    $paginator =new LengthAwarePaginator($item, $total, $perPage, 'null', [        'path' => Paginator::resolveCurrentPath(),  //注释2        'pageName' => 'page',    ]);    $userlist = $paginator->toArray()['data'];//数据,paginator为分页代码    $c = array($userlist,$paginator);    return $c;}
 

  Laravel

作者  :  黄宽

不耻最后,即使慢,驰而不息,纵会落后,纵令失败



About ME

about me

黄宽

我不想成为一个庸俗的人。十年百年后,当我们死去,质疑我们的人同样死去,后人看到的是裹足不前、原地打转的你,还是一直奔跑、走到远方的我?

友情链接