两款万能的php分页类
本文为大家分享个超级好用、万能的php分页类,具体的实现代码如下
第一款php分页类
<?php /* *Tochangethistemplate,chooseTools|Templates *andopenthetemplateintheeditor. */ /** *分页类 *使用方式: *$page=newPage(); *$page->init(1000,20); *$page->setNotActiveTemplate('<span> {a} </span>'); *$page->setActiveTemplate('{a}'); *echo$page->show(); * * *@author风居住的地方 */ classPage{ /** *总条数 */ private$total; /** *每页大小 */ private$pageSize; /** *总页数 */ private$pageNum; /** *当前页 */ private$page; /** *地址 */ private$uri; /** *分页变量 */ private$pageParam; /** *LIMITXX,XX */ private$limit; /** *数字分页显示 */ private$listnum=8; /** *分页显示模板 *可用变量参数 *{total}总数据条数 *{pagesize}每页显示条数 *{start}本页开始条数 *{end}本页结束条数 *{pagenum}共有多少页 *{frist}首页 *{pre}上一页 *{next}下一页 *{last}尾页 *{list}数字分页 *{goto}跳转按钮 */ private$template='<div><span>共有{total}条数据</span><span>每页显示{pagesize}条数据</span>,<span>本页{start}-{end}条数据</span><span>共有{pagenum}页</span><ul>{frist}{pre}{list}{next}{last}{goto}</ul></div>'; /** *当前选中的分页链接模板 */ private$activeTemplate='<liclass="active"><ahref="javascript:;">{text}</a></li>'; /** *未选中的分页链接模板 */ private$notActiveTemplate='<li><ahref="{url}">{text}</a></li>'; /** *显示文本设置 */ private$config=array('frist'=>'首页','pre'=>'上一页','next'=>'下一页','last'=>'尾页'); /** *初始化 *@paramtype$total总条数 *@paramtype$pageSize每页大小 *@paramtype$paramurl附加参数 *@paramtype$pageParam分页变量 */ publicfunctioninit($total,$pageSize,$param='',$pageParam='page'){ $this->total=intval($total); $this->pageSize=intval($pageSize); $this->pageParam=$pageParam; $this->uri=$this->geturi($param); $this->pageNum=ceil($this->total/$this->pageSize); $this->page=$this->setPage(); $this->limit=$this->setlimit(); } /** *设置分页模板 *@paramtype$template模板配置 */ publicfunctionsetTemplate($template){ $this->template=$template; } /** *设置选中分页模板 *@paramtype$activeTemplate模板配置 */ publicfunctionsetActiveTemplate($activeTemplate){ $this->activeTemplate=$activeTemplate; } /** *设置未选中分页模板 *@paramtype$notActiveTemplate模板配置 */ publicfunctionsetNotActiveTemplate($notActiveTemplate){ $this->notActiveTemplate=$notActiveTemplate; } /** *返回分页 *@returntype */ publicfunctionshow(){ returnstr_ireplace(array( '{total}', '{pagesize}', '{start}', '{end}', '{pagenum}', '{frist}', '{pre}', '{next}', '{last}', '{list}', '{goto}', ),array( $this->total, $this->setPageSize(), $this->star(), $this->end(), $this->pageNum, $this->frist(), $this->prev(), $this->next(), $this->last(), $this->pagelist(), $this->gopage(), ),$this->template); } /** *获取limit起始数 *@returntype */ publicfunctiongetOffset(){ return($this->page-1)*$this->pageSize; } /** *设置LIMIT *@returntype */ privatefunctionsetlimit(){ return"limit".($this->page-1)*$this->pageSize.",{$this->pageSize}"; } /** *获取limit *@paramtype$args *@returntype */ publicfunction__get($args){ if($args=="limit"){ return$this->limit; }else{ returnnull; } } /** *初始化当前页 *@returnint */ privatefunctionsetPage(){ if(!empty($_GET[$this->pageParam])){ if($_GET[$this->pageParam]>0){ if($_GET[$this->pageParam]>$this->pageNum) return$this->pageNum; else return$_GET[$this->pageParam]; } } return1; } /** *初始化url *@paramtype$param *@returnstring */ privatefunctiongeturi($param){ $url=$_SERVER['REQUEST_URI'].(strpos($_SERVER['REQUEST_URI'],"?")?"":"?").$param; $parse=parse_url($url); if(isset($parse["query"])){ parse_str($parse["query"],$params); unset($params["page"]); $url=$parse["path"]."?".http_build_query($params); return$url; }else{ return$url; } } /** *本页开始条数 *@returnint */ privatefunctionstar(){ if($this->total==0){ return0; }else{ return($this->page-1)*$this->pageSize+1; } } /** *本页结束条数 *@returntype */ privatefunctionend(){ returnmin($this->page*$this->pageSize,$this->total); } /** *设置当前页大小 *@returntype */ privatefunctionsetPageSize(){ return$this->end()-$this->star()+1; } /** *首页 *@returntype */ privatefunctionfrist(){ $html=''; if($this->page==1){ $html.=$this->replace("{$this->uri}&page=1",$this->config['frist'],true); }else{ $html.=$this->replace("{$this->uri}&page=1",$this->config['frist'],false); } return$html; } /** *上一页 *@returntype */ privatefunctionprev(){ $html=''; if($this->page>1){ $html.=$this->replace($this->uri.'&page='.($this->page-1),$this->config['pre'],false); }else{ $html.=$this->replace($this->uri.'&page='.($this->page-1),$this->config['pre'],true); } return$html; } /** *分页数字列表 *@returntype */ privatefunctionpagelist(){ $linkpage=""; $lastlist=floor($this->listnum/2); for($i=$lastlist;$i>=1;$i--){ $page=$this->page-$i; if($page>=1){ $linkpage.=$this->replace("{$this->uri}&page={$page}",$page,false); }else{ continue; } } $linkpage.=$this->replace("{$this->uri}&page={$this->page}",$this->page,true); for($i=1;$i<=$lastlist;$i++){ $page=$this->page+$i; if($page<=$this->pageNum){ $linkpage.=$this->replace("{$this->uri}&page={$page}",$page,false); }else{ break; } } return$linkpage; } /** *下一页 *@returntype */ privatefunctionnext(){ $html=''; if($this->page<$this->pageNum){ $html.=$this->replace($this->uri.'&page='.($this->page+1),$this->config['next'],false); }else{ $html.=$this->replace($this->uri.'&page='.($this->page+1),$this->config['next'],true); } return$html; } /** *最后一页 *@returntype */ privatefunctionlast(){ $html=''; if($this->page==$this->pageNum){ $html.=$this->replace($this->uri.'&page='.($this->pageNum),$this->config['last'],true); }else{ $html.=$this->replace($this->uri.'&page='.($this->pageNum),$this->config['last'],false); } return$html; } /** *跳转按钮 *@returnstring */ privatefunctiongopage(){ $html=''; $html.=' <inputtype="text"value="'.$this->page.'"onkeydown="javascript:if(event.keyCode==13){varpage=(this.value>'.$this->pageNum.')?'.$this->pageNum.':this.value;location=\''.$this->uri.'&page=\'+page+\'\'}"style="width:25px;"/><inputtype="button"onclick="javascript:varpage=(this.previousSibling.value>'.$this->pageNum.')?'.$this->pageNum.':this.previousSibling.value;location=\''.$this->uri.'&page=\'+page+\'\'"value="GO"/>'; return$html; } /** *模板替换 *@paramtype$replace替换内容 *@paramtype$result条件 *@returntype */ privatefunctionreplace($url,$text,$result=true){ $template=($result?$this->activeTemplate:$this->notActiveTemplate); $html=str_replace('{url}',$url,$template); $html=str_replace('{text}',$text,$html); return$html; } }
第二款php分页类
<?php /* *本程序文件对分页程序进行了封装 * */ classPage_Link { var$page_max=10;//一组页码的最大数 var$page_num=10;//总页数 var$length=20;//一页的数据条数 var$isNextPage=true; var$isFirstPage=false; functionCalculation_Page_Num($total) { $this->page_num=ceil($total/$this->length); return$this->page_num; } functionCalculation_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; } //主方法 functionmake_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; } ////带总页数 functionmake_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; } //附加上一页和下一页 functionmake_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; } //附加首页和尾页 functionmake_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; } /** *带上一页<,下一页>,省略号的分页 *@paramint$total记录总条数 *@paramint$act_page当前页码 *@paramstring$urlurl *@paramint$maxpageicon最大显示页码数 *@paramint$style上一页,下一页显示样式 *@paramstring$paramurl参数 */ functionmake_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){ case1: $name_before='前一页'; $name_next='后一页'; break; case2: $name_before='<'; $name_next='>'; break; case3: $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; } }elseif($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; } } ?>
以上就是为大家分享的两款php分页类,希望对大家的学习有所帮助。