自己写的一个php分页类,支持onclick和详细定制参数

2 篇文章 0 订阅
1 篇文章 0 订阅

调用

echo page::html(array('rows' => $rowCount, 'nums' => 6, 'countsL' => '共', 'countsR' => '条记录', 'timeA' => microtime(1))); 


效果

1共259条记录耗时0毫秒

---------------------代码----------------------


<?php 
class page {
    private static $base = ''; //页码url http://a.c/?
    private static $pageL = ''; //url中页码左边 p=L_1_R,不能使用数字 http://test.q/?&page=ddddd5kdfkd
    private static $pageR = ''; //url中页码右边拼串  p=L_1_R

    private static $rows =  0;//记录数
    private static $per = 10; //每页记录数
    private static $nums =  3; //当前页按钮二边个数,小于0不显示, 首页 上页 1 2 当页 1 2 中的1 2
    private static $i =  0; //当前页码,默认是0,如果设置大于0数字,将优先使用而不理会页面中page参数指定的偏移,建议只有page参数无法$_GET时才使用,如unset了
    private static $isOffset    = 0; //$page 中的偏移是记录条数,而不是页数
    private static $first = '首页';//设置false禁显,字符显示
    private static $next = '下页';//同上
    private static $prev = '上页';//同上
    private static $last = '尾页';//同上
    private static $barL = '';//页条左边html <span class="pageBar"> 首页 1 2 3 
    private static $barR = '';//页条右边html
    private static $firstL = '<b class="first">';//首页左边html
    private static $firstR     = '</b>';//首页右边html
    private static $lastL = '<b class="last">';//尾页左边html
    private static $lastR = '</b>';//尾页右边html
    private static $url = ''; //初始没页码时的url,因为首次并不需要分页
    private static $iL = '<i style="i">';//当前页左边html
    private static $iR = '</i>';//当前页右边html
    private static $nextL = '<b class="next">';//下页左htm
    private static $nextR = '</b>';//下页右边htm
    private static $prevL = '<b class="prev">';//上页左html
    private static $prevR = '</b>';//上页右htm
    private static $numL = '<b class="num">';//数字码左htm
    private static $numR = '</b>';//数字码右htm
    private static $page = 'page';//uri中的页码参数名 page=12344
    private static $linkClass = 'link';//页码a的样式类 每个bt会加上后缀如首页是 linkFirst 尾页是 class="linkLast"
    private static $click = false; //码a上οnclick="$click(参数1是页码, '参数2是按钮类型首汉字')", 类型:首,上,数,下,尾, href将变成 href="#url" 形态
    private static $countsL = '';//总共数据左边html
    private static $countsR = '';//总共数据右边html
    private static $timeA = 0;//自动计算从$timeA到现在运行耗时毫秒数,需要传入一个 microtime(1);
    private static $timeHtml = '耗时<>毫秒';//运行耗时html,需要在html中设置标志位 <> ,会自动把标志位替换成 计算出来的毫秒数
    
    public static function html($params = array()) {//可以传递当前页码,防止无法get获取情况

        if (is_array($params) AND !empty($params)) {//自定换内置
            foreach ($params as $key => $val) isset(self::${$key}) AND (self::${$key} = $val);
        }

        if (self::$rows == 0 OR self::$per == 0) return '';//无记录,无偏移
        $num_pages = ceil(self::$rows / self::$per);
        if ($num_pages == 1) return self::$countsL.self::$rows.self::$countsR;//只一页
        $base_page = self::$isOffset ? 0 : 1;//页/记录初始
        $output = '';
                
        if (self::$i) $output .= '<!--放弃page参数-->';//人工干扰当前页
        else if (isset($_GET[self::$page])) {
            self::$i = $_GET[self::$page];//同步当前页
            strlen(self::$pageL) && (self::$i = str_replace(self::$pageL, '', self::$i));//去掉左边非码 
            strlen(self::$pageR) && (self::$i = str_replace(self::$pageR, '', self::$i));//去掉右边非码 
        }
        
        self::$i = (int)self::$i;//防止注入必须数字化
        (self::$i < $base_page) && (self::$i = $base_page);//不允许过头
        $nums = max(0, (int)self::$nums);//不允许负数
        
        //过尾
        if (self::$isOffset) {
            if (self::$i > self::$rows) self::$i = ($num_pages - 1) * self::$per;
        } else {
            if (self::$i > $num_pages) self::$i = $num_pages;
        }

        $uri_page_number = self::$i;        
        if (self::$isOffset) self::$i = floor((self::$i/self::$per) + 1);//记录式,浮+1变整
        self::$base = rtrim(self::$base);
        self::$base = false === strpos(self::$base, '?') ? self::$base .'?' : self::$base;
        self::$base = rtrim(self::$base).'&amp;'.self::$page.'=';

        //是否并处理首页
        if  (self::$first !== FALSE AND self::$i > ($nums + 1)) {
            $url = self::$url == '' ? self::$base.self::$pageL.$base_page.self::$pageR : self::$url;
            $output .= self::$firstL.'<a target="_self" '.(self::$linkClass ? 'class="'.self::$linkClass.'First" ' : '')
                        .(self::$click ? ' οnclick="'.self::$click.'('.$base_page.', \'首\');" href="#' : 'href="')
                        .$url.'">'.self::$first.'</a>'.self::$firstR;
        }

        //是否与处理上页
        if  (self::$prev !== FALSE AND self::$i != 1) {
            if (self::$isOffset) $i = $uri_page_number - self::$per;
            else $i = $uri_page_number - 1;

            if ($i == 0 && self::$url != '') $output .= self::$prevL.'<a target="_self" '.(self::$linkClass ? 'class="'.self::$linkClass.'Prev" ' : '')
                .(self::$click ? ' οnclick="'.self::$click.'('.$base_page.', \'上\');" href="#' : 'href="')
                .self::$url.'">'.self::$prev.'</a>'.self::$prevR;//相当首页,但是指定了无码url
            else {
                $i = ($i == 0) ? $base_page : $i;
                $output .= self::$prevL.'<a target="_self" '.(self::$linkClass ? 'class="'.self::$linkClass.'Prev" ' : '')
                    .(self::$click ? ' οnclick="'.self::$click.'('.$i.', \'上\');" href="#' : 'href="')
                    .self::$base.self::$pageL.$i.self::$pageR.'">'.self::$prev.'</a>'.self::$prevR;
            }
        }

        //是否与处理数字码
        if (self::$nums > 0) {
            $start = ((self::$i - self::$nums) > 0) ? self::$i - (self::$nums - 1) : 1;
            $end   = ((self::$i + self::$nums) < $num_pages) ? self::$i + self::$nums : $num_pages;
            
            for ($loop = $start -1; $loop <= $end; $loop++) {
                if (self::$isOffset) $i = ($loop * self::$per) - self::$per;
                else $i = $loop;

                if ($i >= $base_page) {
                    if (self::$i == $loop) $output .= self::$iL.$loop.self::$iR; //当前页
                    else {                        
                        if ( ($i == $base_page) && (self::$url != '') ) $output .= self::$numL.'<a target="_self" '.(self::$linkClass ? 'class="'.self::$linkClass.'Nums" ' : '')
                                .(self::$click ? ' οnclick="'.self::$click.'('.$i.', \'数\');" href="#' : 'href="')
                                .self::$url.'">'.$loop.'</a>'.self::$numR;//首页
                        else {
                            $output .= self::$numL.'<a target="_self" '.(self::$linkClass ? 'class="'.self::$linkClass.'Nums" ' : '')
                                .(self::$click ? ' οnclick="'.self::$click.'('.$i.', \'数\');" href="#' : 'href="')
                                .self::$base.self::$pageL.$i.self::$pageR.'">'.$loop.'</a>'.self::$numR;
                        }
                    }
                }
            }
        } else if (self::$nums == 0) {//只显示当前页码
            $output .= self::$iL.self::$i.self::$iR; //当前页
        }

        //是否与处理下页
        if (self::$next !== FALSE AND self::$i < $num_pages) {
            if (self::$isOffset) $i = (self::$i * self::$per);
            else $i = self::$i + 1;

            $output .= self::$nextL.'<a target="_self" '.(self::$linkClass ? 'class="'.self::$linkClass.'Next" ' : '')
                .(self::$click ? ' οnclick="'.self::$click.'('.$i.', \'下\');" href="#' : 'href="')
                .self::$base.self::$pageL.$i.self::$pageR.'">'.self::$next.'</a>'.self::$nextR;
        }

        //是否与处理尾页
        if (self::$last !== FALSE AND (self::$i + $nums) < $num_pages) {
            if (self::$isOffset) $i = (($num_pages * self::$per) - self::$per);
            else $i = $num_pages;
            
            $output .= self::$lastL.'<a target="_self" '.(self::$linkClass ? 'class="'.self::$linkClass.'Last" ' : '')
                .(self::$click ? ' οnclick="'.self::$click.'('.$i.', \'尾\');" href="#' : 'href="')
                .self::$base.self::$pageL.$i.self::$pageR.'">'.self::$last.'</a>'.self::$lastR;
        }

        $output = preg_replace("#([^:])//+#", "\\1/", $output);//双 http://s.com//index.php的//变单个/index
        $output .= self::$countsL.self::$rows.self::$countsR;    //加上数据总数    

        if (!empty(self::$timeA) and is_numeric(self::$timeA)) {//加上运行耗时
            $output .= str_replace('<>', round(microtime(1) - self::$timeA, 2), self::$timeHtml);
        }
        
        $output = self::$barL.$output.self::$barR;
        return $output;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值