php做一个简单的分页类

分页类原理及所需变量:

原理的3个变量:
总条数      $total
每月条数    $perpage
当前        $page

原理公式
$cont = ceil($total/$perpage);  // 相除,向上取整

明白如果是第$page页,那么应该显示第几条到第几条?
第$page页,说明前面已经跳过了$page-1页,每页又是$perpage条
跳过了($page-1)*$perpage条,即从第($page-1)*$perpage+1条开始取,取$perpage条出来

分页导航的生成
例:
c.php?page=1

分页导航里
[1] [2] [3] [4]
page参数,应该根据当前的页码来生成,但同时不能把其他参数搞丢
所以,我们先把地址栏的参数获取并保存起来


下面看具体代码:

class PageTool {
    protected $total = 0;   // 总条数
    protected $perpage = 5; // 每页条数
    protected $page = 1;    // 当前页

    public function __construct($total,$page=false,$perpage=false) {
        $this->total = $total;
        if($perpage) {
            $this->perpage = $perpage;
        }

        if($page) {
            $this->page = $page;
        }
    }

    // 主要函数 创建分页导航
    public function show() {
        $cnt = ceil($this->total/$this->perpage);   // 总页数

        $uri = $_SERVER['REQUEST_URI']; // 获取地址栏上的地址
        $parse = parse_url($uri); // 把地址栏上的地址信息转换成数组 如:Array ( [path] =>                              /bool/tool/PageTool.class.php [query] => cat_id=10&page=11 ) 

        $param = array();
        if(isset($parse['query'])) {
            parse_str($parse['query'],$param);  // 把字符串转换成数组
        }
        // 不管$param数组里有没有page单元,都unset一下,确保没有page单元
        unset($param['page']);

        $url = $parse['path'] . '?';
        if(!empty($param)) {
            $param = http_build_query($param);
            $url = $url . $param . '&';
        }

        // 计算页码导航
        $nav = array();
        $nav[0] = '<span class="page_naow"> ' . $this->page . ' </span>';

        for($left = $this->page-1,$right=$this->page+1;($left>=1||$right<=$cnt)&&count($nav)<=5;) {
            if($left >= 1) {
                array_unshift($nav,'<a href="' . $url . 'page=' . $left . '"> ['. $left . '] </a>');
                $left -= 1;
            }

            if($right<=$cnt) {
                array_push($nav,'<a href="' . $url . 'page=' . $right . '"> [' . $right . '] </a>');
                $right += 1;
            }
        }

        return implode('',$nav);
    }
}

/*

分页调用测试

new pagetool(总条数,当前页,每页条数);

show() 返回分页代码

$page = $_GET['page']?$_GET['page']:1;

$p = new PageTool(20,$page,6);
echo $p->show();
*/


一个简单的分页类就搞定了!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值