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);


    支撑多种样式:




    文艺不是炫耀,不是花哨空洞的文字堆砌,不是一张又一张的逆光照片,不是将旅行的意义转化为名牌包和明信片的物质展示;很多时候它甚至完全不美——它嘶吼、扭曲,它会痛苦地抽搐,它常常无言地沉默。——艾小柯《文艺是一种信仰》
    分享到: