分页函数分享

33 篇文章 0 订阅

原先TP 3.2框架中的Page类是蛮好用的,但是最近有一个比较坑的地方就是我没有办法获取全部满足条件的记录数,但是又需要分页的效果,没有办法,只好自己写了下面这个类,还需要完善,但是基本测试是没有问题的:

<?php
/**
 * Created by PhpStorm.
 * User: root
 * Date: 17-8-10
 * Time: 上午11:08
 */
namespace Vendor\GetPage;

class GetPage{
    const FRONT_HREF_NUMBER=2;
    const BACK_HREF_NUMBER=2;
    const FIRST_PAGE_NAME="首页";
    const LAST_PAGE_NAME="尾页";
    const FRONT_PAGE_NAME="上一页";
    const BACK_PAGE_NAME="下一页";
//    const CURRENT_PAGE_NAME="";
    private $page_size;
    public function __construct($page_size)
    {
        $this->page_size=$page_size;
    }

    /**
     * 根据传入值计算出超链接数量
     *
     * @param $baseUrl string
     * @param $dataInfoCount int|string
     * @param $p int|string
     * @return string
     */
    public function show($baseUrl,$dataInfoCount,$p){
        $p=intval($p);
        $dataInfoCount=intval($dataInfoCount);
        $href=$this->getRange($dataInfoCount,$p);
        $show="";
        foreach ($href as $k=>$v){
            $temp=$baseUrl."/p/".$v;
            if($v==$p){
                $a="<span><a href='{$temp}' class='current'>{$v}</a></span>";
            }else{
                $a="<span><a href='{$temp}'>{$v}</a></span>";
            }
            $show.=$a;
        }
        return $show;
    }

    /**
     * 根据传入值计算出可用超链接的区间
     *
     * @param $dataInfo array
     * @param $p int
     * @return mixed
     */
    private function getRange($dataCount,$p){
        // 该页信息数量没有达一页显示的最大值,则表示该页是最后一页
        if($dataCount<$this->page_size){
            $end=$p;
            // 总共需要显示的超链接数量
            $hrefCount=self::BACK_HREF_NUMBER+self::FRONT_HREF_NUMBER+1;
            // 现有分页数量能否满足显示全部超链接
            $test=$p-$hrefCount;
            // 如果不能的话,则显示最多超链接数量
            if($test<0){
                $start=1;
            }
            // 如果可以,则显示全部超链接数量
            else{
                $start=$test;
            }
        }
        // 如果不是最后一页,则计算前后共需要多少超链接
        else{
            $test=$p-self::FRONT_HREF_NUMBER;
            // 表明当前页前面无法放置2个超链接(该值可以修改),所以直接从首页开始显示
            if($test<=0){
                $start=1;
                $end=$p+self::BACK_HREF_NUMBER;
            }else{
                $start=$test;
                $end=$p+self::BACK_HREF_NUMBER;
            }
        }
        for (;$start<=$end;$start++){
            $href[$start]=$start;
        }
        return $href;
    }
}

不可否认的是这个类生成的超链接有数据显示为空的情况,甚至如果增大BACK_HREF_NUMBER的值,有的页面还会出现错误的情况,但是对于不能提前确定数量,又想模拟分页的要求来说,预测未来本就需要一点代价不是吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值