首页 > 代码库 > php 分页类

php 分页类

<?php/* *本程序文件对分页程序进行了封装 **/class Page_Link{    var $page_max = 10; //一组页码的最大数    var $page_num = 10; //总页数    var $length = 20; //一页的数据条数    var $isNextPage = true;    var $isFirstPage = false;    function Calculation_Page_Num( $total )    {        $this->page_num = ceil( $total / $this->length );        return $this->page_num;    }    function Calculation_Min_Max( $act_page = 1 )    {        // 定义左右偏移量        $py_left = 0;        $py_right = 0;        // 定义左右边界        $bj_left = 0;        $bj_right = 0;        // 定义滚动区间边界        $gd_left = 0;        $gd_right = 0;        // 判断是否需要分组        if ( ( $this->page_num - $this->page_max ) <= 0 )        {            // 不需要分组            $bj_left = 1;            $bj_right = $this->page_num;        }        else        {            // 要进行分组            // 判断容量的奇偶            $tmp = $this->page_max % 2;            if ( $tmp === 1 )            {                // 奇数                $py_left = $py_right = ( $this->page_max - 1 ) / 2;            }            else            {                // 偶数                $py_left = $this->page_max / 2 - 1;                $py_right = $this->page_max / 2;            }            // 计算滚动区间            $gd_left = 1 + $py_left;            $gd_right = $this->page_num - $py_right;            // 判断当前页是否落入了滚动区间            if ( $act_page >= $gd_left && $act_page <= $gd_right )            {                // 区间内                $bj_left = $act_page - $py_left;                $bj_right = $act_page + $py_right;            }            else            {                // 区间外                if ( ( $act_page - $py_left ) <= 1 )                {                    // 左侧固定区间                    $bj_left = 1;                    $bj_right = $this->page_max;                }                else                {                    $bj_left = $this->page_num - $this->page_max + 1;                    $bj_right = $this->page_num;                }            }        }        $res = array();        $res[‘min‘] = $bj_left;        $res[‘max‘] = $bj_right;        return $res;           }    // 主方法

     /*
     * $total 数据总数
     * $act_page 当前页
     * $url 跳转url
     * $param 页码参数
     */

    function make_page( $total, $act_page, $url, $param )    {        $page_num = $this->Calculation_Page_Num( $total );        $arr_min_max = $this->Calculation_Min_Max( $act_page );                if (!eregi("([?|&]$param=)", $url)) {            $url = strpos($url,"?")===false?$url."?":$url."&";            $url = $url."$param=0";        }        if ( $act_page > $page_num )        {            $act_page = $page_num;        }        // 用正则把url改成正规的        $url = eregi_replace( $param . ‘=[0-9]+‘, $param . ‘=0‘, $url );        $res = array();        $d = 0;        for( $i = $arr_min_max[‘min‘];$i <= $arr_min_max[‘max‘];$i++ )        {            if ( $i == $act_page )            {                $res[$d][‘url‘] = ‘‘;                $res[$d][‘name‘] = $i;                $res[$d][‘no‘] = $i;            }            else            {                $res[$d][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ . $i, $url );                $res[$d][‘name‘] = $i;                $res[$d][‘no‘] = $i;            }            $d++;        }        if ( $this->isNextPage )        {            $res = $this->make_before_next_link( $res, $act_page, $url, $param );        }        if ( $this->isFirstPage )        {            $res = $this->make_first_end_link( $res, $act_page, $url, $param );        }        return $res;    }    //// 带总页数    function make_page_with_total( $total, $act_page, $url, $param )    {        $page_num = $this->Calculation_Page_Num( $total );        $arr_min_max = $this->Calculation_Min_Max( $act_page );                if (!eregi("([?|&]$param=)", $url)) {            $url = strpos($url,"?")===false?$url."?":$url."&";            $url = $url."$param=0";        }        if ( $act_page > $page_num )        {            $act_page = $page_num;        }        // 用正则把url改成正规的        $url = eregi_replace( $param . ‘=[0-9]+‘, $param . ‘=0‘, $url );        $res = array();        $d = 0;        for( $i = $arr_min_max[‘min‘];$i <= $arr_min_max[‘max‘];$i++ )        {            if ( $i == $act_page )            {                $res[$d][‘url‘] = ‘‘;                $res[$d][‘name‘] = $i;                $res[$d][‘no‘] = $i;            }            else            {                $res[$d][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ . $i, $url );                $res[$d][‘name‘] = $i;                $res[$d][‘no‘] = $i;            }            $d++;        }        if ( $this->isNextPage )        {            $res = $this->make_before_next_link( $res, $act_page, $url, $param );        }        if ( $this->isFirstPage )        {            $res = $this->make_first_end_link( $res, $act_page, $url, $param );        }                $total_num= ceil($total/$this->length);        $result[‘total‘]=$total_num;        $result[‘DATA‘]=$res;        return $result;    }        // 附加上一页和下一页    function make_before_next_link( $arr, $act, $url, $param )    {        $tmp = array();        $before = $act - 1;        $next = $act + 1;        if ( $before < 1 )        {            $before = 1;            $tmp[0][‘url‘] = ‘‘;            $tmp[0][‘name‘] = "上一页";            $tmp[0][‘no‘] = $before;        }        else        {            $tmp[0][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ . $before, $url );            $tmp[0][‘name‘] = "上一页";            $tmp[0][‘no‘] = $before;        }        $counts = sizeof( $arr );        $tmp_count = sizeof( $tmp );        for( $i = 0;$i < $counts;$i++ )        {            $tmp[$tmp_count][‘url‘] = $arr[$i][‘url‘];            $tmp[$tmp_count][‘name‘] = $arr[$i][‘name‘];            $tmp[$tmp_count][‘no‘] = $arr[$i][‘no‘];            $tmp_count++;        }        if ( $next > $this->page_num )        {            $next = $this->page_num;            $tmp[$tmp_count][‘url‘] = ‘‘;            $tmp[$tmp_count][‘name‘] = "下一页";            $tmp[$tmp_count][‘no‘] = $next;        }        else        {            $tmp[$tmp_count][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ . $next, $url );            $tmp[$tmp_count][‘name‘] = "下一页";            $tmp[$tmp_count][‘no‘] = $next;        }        return $tmp;    }        // 附加首页和尾页    function make_first_end_link( $arr, $act, $url, $param )    {        $tmp = array();        $before = 1;        $next = $this->page_num;        if ( $act == 1 )        {            $before = 1;            $tmp[0][‘url‘] = ‘‘;            $tmp[0][‘name‘] = "首页";            $tmp[0][‘no‘] = $before;        }        else        {            $tmp[0][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ . $before, $url );            $tmp[0][‘name‘] = "首页";            $tmp[0][‘no‘] = $before;        }        $counts = sizeof( $arr );        $tmp_count = sizeof( $tmp );        for( $i = 0;$i < $counts;$i++ )        {            $tmp[$tmp_count][‘url‘] = $arr[$i][‘url‘];            $tmp[$tmp_count][‘name‘] = $arr[$i][‘name‘];            $tmp[$tmp_count][‘no‘] = $arr[$i][‘no‘];            $tmp_count++;        }        if ( $act == $this->page_num )        {            $tmp[$tmp_count][‘url‘] = ‘‘;            $tmp[$tmp_count][‘name‘] = "尾页";            $tmp[$tmp_count][‘no‘] = $next;        }        else        {            $tmp[$tmp_count][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ . $next, $url );            $tmp[$tmp_count][‘name‘] = "尾页";            $tmp[$tmp_count][‘no‘] = $next;        }        return $tmp;    }             /**     * 带上一页<,下一页>,省略号的分页     * @param int $total        记录总条数     * @param int $act_page        当前页码     * @param string $url        url     * @param int $maxpageicon    最大显示页码数     * @param int $style        上一页,下一页显示样式     * @param string $param        url参数     */    function make_page_with_points( $total,$act_page,$url,$maxpageicon,$style,$param )    {        $page_num = $this->Calculation_Page_Num( $total );        //总页数        $arr_min_max = $this->Calculation_Min_Max( $act_page );        //最大页,最小页            if($total==0)        {             return "";        }        if( $act_page > $page_num )        {            $act_page = $page_num+1;            $page_num = $page_num+1;        }                switch ($style){            case 1:                $name_before = ‘前一页‘;                $name_next = ‘后一页‘;                break;            case 2:                $name_before = ‘<‘;                $name_next = ‘>‘;                break;            case 3:                $name_before = ‘<<‘;                $name_next = ‘>>‘;                break;            default:                $name_before = ‘上一页‘;                $name_next = ‘下一页‘;        }                if (!eregi("([?|&]$param=)", $url)) {            $url = strpos($url,"?")===false?$url."?":$url."&";            $url = $url."$param=0";        }                        // 用正则把url改成正规的        $url = eregi_replace( $param . ‘=[0-9]+‘, $param . ‘=0‘, $url );        $res = array();        $no_before = $act_page-1;        $no_next = $act_page+1;                //总页数如果小于等于初始化最大呈现页数        if ($page_num<= ($maxpageicon + 1))        {            //如果当前页数是首页  上一页无效            if ($act_page == 1)                {                $res[0][‘url‘] = ‘‘;                $res[0][‘name‘] = $name_before;                $res[0][‘no‘] = $no_before;            }            else            //上一页有效            {                $res[0][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ .($act_page - 1), $url );                $res[0][‘name‘] = $name_before;                $res[0][‘no‘] = $no_before;              }            //循环添加页码            $d = 1;            for ($i = 1; $i <= $page_num; $i++)            {                if ($i != $act_page)                {                    $res[$d][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ . $i, $url );                    $res[$d][‘name‘] = $i;                    $res[$d][‘no‘] = $i;                }                else    //当前页,页码                {                    $res[$d][‘url‘] = ‘‘;                    $res[$d][‘name‘] = $i;                    $res[$d][‘no‘] = $i;                    $res[$d][‘attr‘] = ‘current‘;                }                $d++;            }            $last_d = count($res);            //判断尾页            if($act_page == $page_num)    //下一页无效            {                $res[$last_d][‘url‘] = ‘‘;                $res[$last_d][‘name‘] = $name_next;                $res[$last_d][‘no‘] = $no_next;                    }            else            {                  $res[$last_d][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ .($act_page + 1), $url );                $res[$last_d][‘name‘] = $name_next;                $res[$last_d][‘no‘] = $no_next;            }        }else if ($page_num > ($maxpageicon + 1))//如果总页数满足添加省略号        {             if ($act_page <= $maxpageicon) //如果当前页小于等于初始化数目            {                //如果当前页数是首页  上一页无效                if ($act_page == 1)                    {                    $res[0][‘url‘] = ‘‘;                    $res[0][‘name‘] = $name_before;                    $res[0][‘no‘] = $no_before;                }                else            //上一页有效                {                    $res[0][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ .($act_page - 1), $url );                    $res[0][‘name‘] = $name_before;                    $res[0][‘no‘] = $no_before;                  }                //循环添加页码                $d = 1;                for ($i = 1; $i <= $maxpageicon; $i++)                {                    if ($i != $act_page)                    {                        $res[$d][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ . $i, $url );                        $res[$d][‘name‘] = $i;                        $res[$d][‘no‘] = $i;                    }                    else    //当前页,页码                    {                        $res[$d][‘url‘] = ‘‘;                        $res[$d][‘name‘] = $i;                        $res[$d][‘no‘] = $i;                        $res[$d][‘attr‘] = ‘current‘;                    }                    $d++;                }                $last_d = count($res);                //添加省略号                $res[$last_d][‘url‘] = ‘‘;                $res[$last_d][‘name‘] = ‘...‘;                $res[$last_d][‘no‘] = ‘‘;                //总页数                $res[$last_d+1][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ . $page_num, $url );                $res[$last_d+1][‘name‘] = $page_num;                $res[$last_d+1][‘no‘] = $page_num;                //下一页                $res[$last_d+1][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ . ($act_page + 1), $url );                $res[$last_d+1][‘name‘] = $name_next;                $res[$last_d+1][‘no‘] = $no_next;                     }else//如果当前页大于最大显示页面            {                if ($act_page > ($page_num - $maxpageicon))//满足后几页                {                    //上一页                    $res[0][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ .($act_page - 1), $url );                    $res[0][‘name‘] = $name_before;                    $res[0][‘no‘] = $no_before;                    //第一页                    $res[1][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=1‘, $url );                    $res[1][‘name‘] = 1;                    $res[1][‘no‘] = 1;                       //省略号                    $res[2][‘url‘] = ‘‘;                    $res[2][‘name‘] = ‘...‘;                    $res[2][‘no‘] = ‘‘;                      $d = 3;                    for ($i = ($page_num - $maxpageicon + 1); $i <= $page_num; $i++)                    {                        if ($i != $act_page)                        {                            $res[$d][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ . $i, $url );                            $res[$d][‘name‘] = $i;                            $res[$d][‘no‘] = $i;                        }                        else    //当前页,页码                        {                            $res[$d][‘url‘] = ‘‘;                            $res[$d][‘name‘] = $i;                            $res[$d][‘no‘] = $i;                            $res[$d][‘attr‘] = ‘current‘;                        }                        $d++;                    }                    $last_d = count($res);                    //判断尾页                    if($act_page == $page_num)    //下一页无效                    {                          $res[$last_d][‘url‘] = ‘‘;                        $res[$last_d][‘name‘] = $name_next;                        $res[$last_d][‘no‘] = $no_next;                            }                    else                    {                          $res[$last_d][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ .($act_page + 1), $url );                        $res[$last_d][‘name‘] = $name_next;                        $res[$last_d][‘no‘] = $no_next;                    }                }else//满足处在中间                {                    //上一页                    $res[0][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ .($act_page - 1), $url );                    $res[0][‘name‘] = $name_before;                    $res[0][‘no‘] = $no_before;                    //第一页                    $res[1][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=1‘, $url );                    $res[1][‘name‘] = 1;                    $res[1][‘no‘] = 1;                       //省略号                    $res[2][‘url‘] = ‘‘;                    $res[2][‘name‘] = ‘...‘;                    $res[2][‘no‘] = ‘‘;                      for ($i = ($act_page - ($maxpageicon - 2) / 2); $i <= floor($act_page+($maxpageicon - 2) / 2); $i++)                    {                        $i = ceil($i);                        if ($i != $act_page)                        {                            $res[$d][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ . $i, $url );                            $res[$d][‘name‘] = $i;                            $res[$d][‘no‘] = $i;                        }                        else    //当前页,页码                        {                            $res[$d][‘url‘] = ‘‘;                            $res[$d][‘name‘] = $i;                            $res[$d][‘no‘] = $i;                            $res[$d][‘attr‘] = ‘current‘;                        }                        $d++;                   }                    $last_d = count($res);                    //加省略号                    $res[$last_d][‘url‘] = ‘‘;                    $res[$last_d][‘name‘] = ‘...‘;                    $res[$last_d][‘no‘] = ‘‘;                    //当前页                    $res[$last_d+1][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ . $page_num, $url );                    $res[$last_d+1][‘name‘] = $page_num;                    $res[$last_d+1][‘no‘] = $page_num;                            //下一页                    $res[$last_d+2][‘url‘] = str_replace( $param . ‘=0‘, $param . ‘=‘ . ($act_page + 1), $url );                    $res[$last_d+2][‘name‘] = $name_next;                    $res[$last_d+2][‘no‘] = $no_next;                    //exit;                     }            }        }        return $res;    }}?>

调用

//分页$page=$_GET["p"];$num=5;include "class.page.php";$rs_total = $cls_news->get_news_count($classid);//数据总数$total_page = ceil($rs_total / $list_news_count);//总页数$page_cls = new Page_Link();$page_cls->length = $num;//每页条数$url = "http://localhost:8001/list.php";$page_arr = $page_cls->make_page($rs_total,$page,$url,"p");$fenye="";foreach ($page_arr as $v){    $v["url"]=$v["url"]==""?"javascript:;":$v["url"];    if ($v["name"]=="Previous"){        $fenye .="<a href=http://www.mamicode.com/‘{$v["url"]}‘ class=‘listPrev‘>{$v["name"]}</a>";    }elseif($v["name"]=="Next"){        $fenye .="<a href=http://www.mamicode.com/‘{$v["url"]}‘ class=‘listNext‘>{$v["name"]}</a>";    }else{        $fenye .="<a href=http://www.mamicode.com/‘{$v["url"]}‘>{$v["name"]}</a>";    }       }echo $fenye;

 

php 分页类