php 分页类   
               添加时间:2013-8-5 点击量: 
 
              
<?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;
       
    }
    // 主办法
    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_no = ¥_GET[page_no] ? ¥_GET[page_no] : 1;
¥count = 20;
¥start = (¥page_no-1)¥count;
¥end = ¥start + ¥count;
¥page = new Page_Link();
¥page->length = ¥count;
¥page->isFirstPage = true;
¥url = ¥_SERVER[SCRIPT_NAME].?&a=.¥a;
¥page_arr = ¥page->make_page(¥total_num,¥page_no,¥url,page_no);
支撑多种样式:



文艺不是炫耀,不是花哨空洞的文字堆砌,不是一张又一张的逆光照片,不是将旅行的意义转化为名牌包和明信片的物质展示;很多时候它甚至完全不美——它嘶吼、扭曲,它会痛苦地抽搐,它常常无言地沉默。——艾小柯《文艺是一种信仰》
                     
                  
     
  
 
    
    
<?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;
}
// 主办法
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_no = ¥_GET[page_no] ? ¥_GET[page_no] : 1;
¥count = 20;
¥start = (¥page_no-1)¥count;
¥end = ¥start + ¥count;
¥page = new Page_Link();
¥page->length = ¥count;
¥page->isFirstPage = true;
¥url = ¥_SERVER[SCRIPT_NAME].?&a=.¥a;
¥page_arr = ¥page->make_page(¥total_num,¥page_no,¥url,page_no);
支撑多种样式:







