PHP分页类New

全屏阅读
  • 基本信息
class PagingSky{
    public $sum; //数据总数
    public $num; //每页显示数量
    public $pagesum; //页面总数
    public $lxpages; //连续显示的页面数量 必须为奇数
    public $pageid; //当前页面
    public $Paing; //分页html
    function __construct($sum,$num,$pageid,$lxpages){
        $this->sum = $sum;
        $this->num = $num;
        $this->pagesum = ceil($sum/$num);
        if($pageid){
            if($pageid<=($pageid<=$this->pagesum)&&$pageid>0){
                $this->pageid = $pageid;
            }else if($pageid>$this->pagesum){
                $this->pageid = $this->pagesum;
            }else if($pageid<=0){
                $this->pageid = 1;
            }
        }else{
            $this->pageid = 1;
        }
        $this->lxpages = $lxpages;
        echo "[连续显示".$this->lxpages."]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
    }
    public function getTopPre(){ //获取首页和上一页分页
       $str = "";
       if($this->pageid!=1){
            $str .= "<div style='font-size:14px'><span><a href='page.php?pageid=1'>首页</a></span> ";
            $str .= "<span style='color:#ccc'><a href='page.php?pageid=".($this->pageid-1)."'>上一页</a></span> ";
        }else{ //当前页为首页
            $str .= "<span style='font-weight:bold'>首页</span> ";
        }
        return $str;
    }
    //循环输出分页函数 主要是为了简化getLxPaging的代码量 参数为$i初始值 最大输出页 
    public function forpage($i_tmp,$pagmax){
        for($i = $i_tmp;$i<=$pagmax;$i++){
                if($this->pageid!=$i){
                    $str .= "<span><a  href='page.php?pageid=".$i."'>".$i."</a></span> ";
                }else{
                    $str .= "<span style='font-weight:bold'>".$i."</span> ";
                }
        }
        return $str;
    }
    public function getLxPaging(){
        $dcs = ($this->lxpages-1)/2; //分页对称数
        //显示当前选择1到当前选择页
        /*如果当前选择页减去2[☆1到当前选择页之间的页面数]小于等于分页对称数
         *或者
         *当前选择页减去(分页对称数加2)[☆也就是当前选择页除去左侧对称数以及第1页后和第
         *一页之间只间隔了第2页这1页的情况]等于1
         *则
         *从第一页到当前页全部显示
         */
        if((($this->pageid-2)<=$dcs)||(($this->pageid-($dcs+2))==1)){
            $str .= $this->forpage(1,$this->pageid);
        }
        /*
         *如果以上第二条件结果大于1,说明当前选择页除去左侧对称页及第1页以后与第1页的距离
         *大于等于2,那么第一页到左侧对称页之间用"..."代替
         */
        else if((($this->pageid-($dcs+2))>=2)){
            //输出第一页
            $str .= "<span><a  href='page.php?pageid=1'>1</a></span> ";
            $zcdcy = $this->pageid-$dcs; //获取左侧对称页的第1个页码
            /*如果当前选择页与当前最大页之间的距离小于对称页加1
             *也就是当前选择页与最大页之间的距离小于等于对称页 那么当前选择页右侧全部输出
             *同时
             *如果以第一条件为基础 当前页——最大页 显示数少于 连续显示页面数 那么差值就要由当前选中页左侧来补充
             */
            $lx_dqmax = $this->lxpages-($this->pagesum-$this->pageid+1); //获取连续显示页 与 当前页——最大页 显示数之差
            /*如果当前页减去显示数之差以后 与 第一页的距离 大于1个页码 则输出...
             *如果当前页减去显示数之差以后 与 第一页的距离等于1 那么说明实际输出的结果是第一页和左侧对称页之间只间隔了一个第二页 所以输出第二页 而不用...代替
             */
            if(($this->pageid-$lx_dqmax-2)>1){ //输出...
                $str .= "... ";
            }else if(($this->pageid-$lx_dqmax-2)==1){ //输出第二页
                $str .= "<span><a  href='page.php?pageid=2'>2</a></span> ";
            }
            if((($this->pagesum-($this->pageid+1))<($dcs+1))&&($lx_dqmax>0)){
                if($lx_dqmax<=$dcs){ //如果显示数之差lx_dqmax小于等于对称数 那么当前选中页左侧就按照对称数的数量输出
                    $str .= $this->forpage($this->pageid-$dcs,$this->pageid);
                }else if($lx_dqmax==($this->lxpages-1)){ //如果连续显示数之差等于连续显示数减1 那么说明当前最大页就是当前选中页 
                    //echo $lx_dqmax-$this->pagesum+2;
                    if(($lx_dqmax-$this->pagesum+2)>0){
                        $str .= $this->forpage($this->pageid-$lx_dqmax+($lx_dqmax-$this->pagesum+2),$this->pageid);
                    }else{
                        $str .= $this->forpage($this->pageid-$lx_dqmax,$this->pageid);
                    }
                }else{ //如果显示数之差lx_dqmax大于对称数 那么当前选中页左侧就按照显示数之差lx_dqmax
                    echo $this->pageid-$lx_dqmax;
                    if($this->pageid-$lx_dqmax>1){
                       $str .= $this->forpage($this->pageid-$lx_dqmax,$this->pageid);
                    }else{
                       $str .= $this->forpage($this->pageid-$lx_dqmax+(2-($this->pageid-$lx_dqmax)),$this->pageid);
                    }
                }
            }else{
                $str .= $this->forpage($zcdcy,$this->pageid);//输出左侧对称页到当前页的页码
            }
        }
        //显示当前选择页之后的所有页
        /*
         *如果当前选择页与当前最大页之间的距离小于等于对称页加1那么当前选择页右侧
         *所有页面都输出
         *或者
         *当前选择页
         */
        if((($this->pagesum-($this->pageid+1))<=($dcs+1))){
            $str .= $this->forpage($this->pageid+1,$this->pagesum);
        }
        /*如果当前选择页与最大页距离大于对称页加1 那么输出当前选择页右侧对称页
         *接着输出"..."然后输出最大页
         */
        if(($this->pagesum-($this->pageid+1))>($dcs+1)){
            //如果当前页加上右侧对称页小于 连续显示页 那么最少需要输出连续显示页的数量页
            if(($this->pageid+$dcs)<=$this->lxpages){
                //如果最大页与 连续输出页相差等于1 那么不输出... 直接输出所有
                if(($this->pagesum-($this->lxpages+1))==1){
                    $str .= $this->forpage($this->pageid+1,$this->lxpages+1);
                }
                //如果最大页与 连续输出页相差小于1 那么循环输出所有页面 不输出...
                else if(($this->pagesum-($this->lxpages+1))<1){
                        //进入当前if else分支的 都是最大页与连续输出页相差小于1的情况
                        //由于程序最后始终会输出最后一页 所以此处[$this->lxpages+($this->pagesum-($this->lxpages+1))]少输出最大页
                        //具体少输出多少页方可 由最大页与连续输出页相差 来决定              
                       $str .= $this->forpage($this->pageid+1,$this->lxpages+($this->pagesum-($this->lxpages+1)));
                }else{
                    $str .= $this->forpage($this->pageid+1,$this->lxpages);
                    $str .= "... ";
                }
            }else{
                $str .= $this->forpage($this->pageid+1,$this->pageid+$dcs);
                $str .= "... ";
            }
            //输出"..."和最后一页
            $str .= "<span><a  href='page.php?pageid=".$this->pagesum."'>".$this->pagesum."</a></span> ";
        }
        return $str;
    }
    public function getEndNex(){ //获取末页和下一页
        if($this->pageid==$this->pagesum){//如果当前页面为最后一页 则不显示下一页
            $str .= "<span style='font-weight:bold'>末页</span> ";
        }else{
            $str .= "<span style='color:#ccc'><a href='page.php?pageid=".($this->pageid+1)."'>下一页</a></span> ";
            $str .= "<span><a href='page.php?pageid=".$this->pagesum."'>末页</a></span> ";
        }
        $str .= "页码:".$this->pageid."/".$this->pagesum." ";
        $str .= "总数:".$this->sum."条</div>";
        return $str;
    }
    public function getPaging(){
        return $this->getTopPre().$this->getLxPaging().$this->getEndNex();
    }
}
 
 
 
 
$sum = 13; //数据总条数
$num = 1; //每页显示
$lxpages = 3; //连续显示分页数量
$page3 = new PagingSky($sum,$num,$_GET['pageid'],$lxpages);
echo $page3->getPaging()."<br /><br />";
$lxpages = 5; //连续显示分页数量
$page5 = new PagingSky($sum,$num,$_GET['pageid'],$lxpages);
echo $page5->getPaging()."<br /><br />";
$lxpages = 7; //连续显示分页数量
$page7 = new PagingSky($sum,$num,$_GET['pageid'],$lxpages);
echo $page7->getPaging()."<br /><br />";
$lxpages = 9; //连续显示分页数量
$page9 = new PagingSky($sum,$num,$_GET['pageid'],$lxpages);
echo $page9->getPaging()."<br /><br />";
$lxpages = 11; //连续显示分页数量
$page11 = new PagingSky($sum,$num,$_GET['pageid'],$lxpages);
echo $page11->getPaging()."<br /><br />";
$lxpages = 13; //连续显示分页数量
$page13 = new PagingSky($sum,$num,$_GET['pageid'],$lxpages);
echo $page13->getPaging()."<br /><br />";
$lxpages = 15; //连续显示分页数量
$page15 = new PagingSky($sum,$num,$_GET['pageid'],$lxpages);
echo $page15->getPaging()."<br /><br />";

顶一下
(0)
100%
订阅 回复
踩一下
(0)
100%
» 固定链接:恒富网 » 《PHP分页类New》
» 郑重声明:本文由mpxq168发布,所有内容仅代表个人观点。版权归恒富网mpxq168共有,欢迎转载, 但未经作者同意必须保留此段声明,并给出文章连接,否则保留追究法律责任的权利! 如果本文侵犯了您的权益,请留言。

目前有 0 条留言 其中:访客:0 条, 博主:0 条

给我留言

您必须 [ 登录 ] 才能发表留言!