分页类:功能全面.可以指定上下页的图片

<?php
/************************************************************************************************
Description            设置分页字符串,特色:提供灵活的分页方式,而业可以设置上下页图片
Author                Fyini(老千)
QICQ                303590170
Version                0.1

测试方法
    <?php
        $test=new Pages(234,$_GET['p'],5);
        echo $test->disp();
    ?>
************************************************************************************************/
class Pages{
    var $disp_be_switch;                //是否显示第一页和最后一页
    var $disp_result_number;            //每页显示的记录数
    var $pagesNum;                        //总页数
    var $dispPagesNum;                    //显示页数
    var $currentPage;                    //当前页
    var $disp_type=array(
            1=>array(array('<<front','next>>'),'┈',array('<font color=red>[',']</font>')),
            2=>array(array('<<front','Next>>'),'…',array('<font color=red>〖','〗</font>')),
            3=>array(array('<<front','next>>'),'┈',array('[',']')),
            4=>array(array('<<front','next>>'),'┈',array('〖','〗')),
            5=>array(array('<<','>>'),'┈',array('[',']')),
            6=>array(array('<<','>>'),'┈',array('<font color=red>[',']</font>'))
                );                //默认的几种样式
    /**
    @desc 构造函数,给定:总记录数,当前页数,每页显示的记录数,分页样式0-5,是否绍终显示第一页和最后一页
    @param int $resultNumber        总记录数
    @param int $current                当前页数
    @param int $rowNum                每页显示的记录数
    @param int $dispNum                活动页数
    @param int $type                分页样式0-5
    @param boolean $be_switch        是否绍终显示第一页和最后一页
    @return void
    */
    function Pages($resultNumber,$current,$rowNum,$dispNum=5,$type=6,$be_switch=false){
        if ($type>6||$type<0)$type=6;
        $this->pagesNum=ceil($resultNumber/$rowNum);    //总页数
        $this->currentPage=$current;                    //当前页数
        $this->disp_result_number=$rowNum;                //每页显示的记录数
        $this->dispPagesNum=$dispNum;                    //显示的活动页数
        $this->disp_type=$this->disp_type[$type];        //分页的样式
        $this->disp_be_switch=$be_switch;                //是否显示第一页和最后一页
    }
    /**
    @desc 设置自己的样式时使用的函数
    @param array $previus_and_next    前一页,下一页的样式
    @param array $height_light        当前页高亮显示
    @param string $over                太多页时中间的省略部分
    @return void
    */
    function setOtherDispParam($previous_and_next,$height_light,$over){
        $this->disp_type=null;
        $this->disp_type=array($previous_and_next,$over,$height_light);
    }
    /**
    @desc 输出内容
    @param string $param            分页参数
    @param string $pageurl            URL地址
    @return string
    */
    function disp($param='p',$pageurl=''){
    global $HTTP_SERVER_VARS;
    if (!$pageurl)$pageurl="http://".$HTTP_SERVER_VARS['HTTP_HOST']. $_SERVER['PHP_SELF'];    //当前文件路径
    $middle=(int)($this->dispPagesNum/2);                    //中间数
    $startRow=1;                                            //开始下标
    $endRow=$this->pagesNum;                            //结束下标
    $previous=false;                            //有前导
    $next=false;                                            //有后导
    if ($this->pagesNum>$this->dispPagesNum){                //总页数大于总显示页数,说明使用 << >> 符号
        if ($this->currentPage>$middle+1){        //当前页大于总显示的一半+1,说明使用 << 符号
        $previous=true;                           //将前导设置为有
        $startRow=($this->currentPage<$this->pagesNum-$middle)?$this->currentPage-$middle:($this->pagesNum-$this->dispPagesNum)+1;
            //将开始下标设置成:[当前页数 < 总页数 - 中间页数] ? 是[ 当前页-中间页 ] : 否[ 总页数 - 显示宽度 ]+1
        }
        else                                                //没有前导
        {
            $startRow=1;                                    //设置下标为第一页
        }
        if ($this->currentPage<$this->pagesNum-$middle){    //当前页小于总页数的一半,说明使用 >>符号
                $next=true;                                        //将后导设置为有
                $endRow=($startRow<$middle)?$endRow=$this->dispPagesNum:$this->currentPage+$middle;
                //将结束下标设置成:[开结行 < 中间行] ? 是[显示宽度] : 否[当前页 + 中间行]
            }
            else                                                //没有后导
            {
                $endRow=$this->pagesNum;            //将结束行设置成总页数
            }
        }
        $out='';                                                //用于输出的字串
        for ($i=$startRow;$i<$endRow+1;$i++){
            if ($this->currentPage==$i){
                $out.="{$this->disp_type[2][0]}{$i}{$this->disp_type[2][1]} ";
            }else {
                $out.="<a href='{$pageurl}?{$param}={$i}'>{$i}</a> ";
            }
        }
        $previousPage=$this->currentPage-1;                    //上一页
        $nextPage=$this->currentPage+1;                                               //下一页
        if ($previous){                                            //如果有前导,加上前导
            if ($this->disp_be_switch)                 //是否显示最前页
                $out="<a href='{$pageurl}?{$param}={$previousPage}'>{$this->disp_type[0][0]}</a> <a href='{$pageurl}?{$param}=1'>1</a> {$this->disp_type[1]} {$out}";
            else 
                $out="<a href='{$pageurl}?{$param}={$previousPage}'>{$this->disp_type[0][0]}</a> {$this->disp_type[1]} {$out}";
        }
        if ($next){                                                //如果有后导,加上后导
            if ($this->disp_be_switch)                            //是否显示最后页
                $out.=" {$this->disp_type[1]} <a href='{$pageurl}?{$param}={$this->pagesNum}'>{$this->pagesNum}</a> <a href='{$pageurl}?{$param}={$nextPage}'>{$this->disp_type[0][1]}</a>";
            else 
                $out.=" {$this->disp_type[1]} <a href='{$pageurl}?{$param}={$nextPage}'>{$this->disp_type[0][1]}</a>";
        }
        return $out;
    }
    /**
    @desc 获得总页数
    @return int
    */
    function getCountPages(){
        return $this->dispPagesNum;
    }
    /**
    @desc 获得总记录数
    @return int
    */
    function getCountResult(){
        return $this->disp_result_number;
    }
    /**
    @desc 获得当前页的开始记录数
    @return int
    */
    function getCurrentPageStart(){
        return $this->getCurrentPageEnd()-$this->disp_result_number;
    }
    /**
    @desc 获得当前页的结束记录数
    @return int
    */
    function getCurrentPageEnd(){
        return $this->currentPage*$this->disp_result_number;
    }
    /**
    @decs 获得当前页的页号
    @return int
    */
    function getCurrentPageNumber(){
        return $this->currentPage;
    }
}
?>

文章来自: 转载
引用通告地址: http://www.wantfly.cn/trackback.asp?tbID=128
Tags:
评论: 0 | 引用: 147 | 查看次数: 2938
发表评论
昵 称:
密 码: 游客发言不需要密码.
验证码:
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 关闭 | [img]标签 关闭