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 .="{$v["name"]}";}elseif($v["name"]=="Next"){$fenye .="{$v["name"]}";}else{$fenye .="{$v["name"]}";}}
echo $fenye;

 

转载于:https://www.cnblogs.com/wangxusummer/p/4149243.html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部