PHP实现可自定义样式的分页类
本文实例为大家分享了PHP实现可自定义样式的分页类,供大家参考,具体内容如下
<?php //namespaceComponent; /** *2016-3-27 *@authorankang */ classPage{ private$ShowPage; private$CountPage; private$Floorp; private$PageUrl; private$PageClass; private$CurClass; /** *@authorankang *@paramnumber$CountNum数据总数 *@paramstring$PageUrl跳转链接 *@paramstring$PageClass<a>标签总体样式 *@paramstring$PageUrl当前页样式 *@paramnumber$PageSize每页显示的数据条数 *@paramnumber$ShowPage每次显示的页数 */ publicfunction__construct($CountNum,$PageUrl=NULL,$PageClass=NULL,$CurClass=NULL,$PageSize=20,$ShowPage=5){ $this->ShowPage=$ShowPage; $this->CountPage=ceil($CountNum/$PageSize); $this->Floorp=floor($ShowPage/2);//偏移量 $this->PageClass=is_null($PageClass)?'':$PageClass; $this->CurClass=is_null($CurClass)?'':$CurClass; //$ServerURL=(preg_match('/\?/i',$_SERVER['REQUEST_URI']))?preg_replace('/\&p\=[0-9]+/i',"",$_SERVER['REQUEST_URI']):$_SERVER['REQUEST_URI']."?"; //if(substr($ButURL,0,2)=='//'){ //$ServerURL=substr($ServerURL,1); //} //$url=preg_replace('/p=[\d]*/i','',$ServerURL); $url=''; //推荐自己传url,不传也可以打开上面的代码自动获取 $this->PageUrl=is_null($PageUrl)?$url:$PageUrl; } /** * *@paramnumber$Page *@paramstring$ShowToPage *首页,上下页,尾页 *@paramstring$Html标签元素,li,p *@returnstring */ publicfunctiongetPage($Page=1,$ShowToPage=true,$Html=null){ $StartPage=($Page-$this->Floorp);//开始页码 $EndPage=($Page+$this->Floorp);//结束页码 if($this->CountPage<$this->ShowPage){ $StartPage=1; $EndPage=$this->CountPage; } if($StartPage<1){ $StartPage=1; $EndPage=$this->ShowPage; } if($EndPage>$this->CountPage){ $StartPage=$this->CountPage-$this->ShowPage+1; $EndPage=$this->CountPage; } $PageHtml=''; if(!is_null($Html)){ if($Html=='li'){ $Shtml='<li>'; $Ehtml='</li>'; }else{ $Shtml='<p>'; $Ehtml='</p>'; } } if(true==$ShowToPage){ $PageHtml.="$Shtml<ahref='{$this->PageUrl}p=1'>«首页</a>$Ehtml"; $PrveUrl=$this->getPrve($Page); $PageHtml.="$Shtml<ahref='{$PrveUrl}'>«上一页</a>$Ehtml"; } for($i=$StartPage;$i<=$EndPage;$i++){ if($Page==$i){ $PageHtml.="$Shtml<ahref='{$this->PageUrl}p={$i}'class='{$this->CurClass}'>{$i}</a>$Ehtml"; }else{ $PageHtml.="$Shtml<ahref='{$this->PageUrl}p={$i}'class='{$this->PageClass}'>{$i}</a>$Ehtml"; } } if(true==$ShowToPage){ $NextUrl=$this->getNext($Page); $PageHtml.="$Shtml<ahref='{$NextUrl}'>下一页»</a>$Ehtml"; $PageHtml.="$Shtml<ahref='{$this->PageUrl}p={$this->CountPage}'>尾页»</a>$Ehtml"; } return$PageHtml; } publicfunctiongetPrve($Page){ if($Page!=1){ $Prve=$Page-1; $PrveUrl="{$this->PageUrl}p={$Prve}"; }else{ $PrveUrl="{$this->PageUrl}p=1"; } return$PrveUrl; } publicfunctiongetNext($Page){ if($Page!=$this->CountPage){ $Next=$Page+1; $NextUrl="{$this->PageUrl}p={$Next}"; }else{ $NextUrl="{$this->PageUrl}p={$this->CountPage}"; } return$NextUrl; } }
再为大家分享一个主要用于新手学习php分页,代码简单实用,主要是注释很完整。
1.Page.class.php
<?php /** *分页类 * *调用方式: *$p=newPage(总页数,显示页数,当前页码,每页显示条数,[链接]); *print_r($p->getPages());//生成一个页码数组(键为页码,值为链接) *echo$p->showPages(1);//生成一个页码样式(可添加自定义样式) * *@author:Dzer<Email:358654744@qq.comBlog:Dzer.me> *@version:2014-12-2509:09:42 *@LastModifiedtime:2014-12-2817:37:13 */ /* 思路: 给我一个总页数,需要显示的页数,当前页,每页显示的条数,连接 写一个方法生成一个一维数组,键为页码值为连接 写一个方法返回一个生成好样式的页码(并且可以根据自己需要添加样式) 默认样式共45条记录,每页显示10条,当前第1/4页[首页][上页][1][2][3]..[下页][尾页] */ classPage{ protected$count;//总条数 protected$showPages;//需要显示的页数 protected$countPages;//总页数 protected$currPage;//当前页 protected$subPages;//每页显示条数 protected$href;//连接 protected$page_arr=array();//保存生成的页码键页码值为连接 /** *__construct构造函数(获取分页所需参数) *@paramint$count总条数 *@paramint$showPages显示页数 *@paramint$currPage当前页数 *@paramint$subPages每页显示数量 *@paramstring$href连接(不设置则获取当前URL) */ publicfunction__construct($count,$showPages,$currPage,$subPages,$href=''){ $this->count=$count; $this->showPages=$showPages; $this->currPage=$currPage; $this->subPages=$subPages; //如果链接没有设置则获取当前连接 if(empty($href)){ $this->href=htmlentities($_SERVER['PHP_SELF']); }else{ $this->href=$href; } $this->construct_Pages(); } /** *getPages返回页码数组 *@returnarray一维数组键为页码值为链接 */ publicfunctiongetPages(){ return$this->page_arr; } /** *showPages返回生成好的页码 *@paramint$style样式 *@returnstring生成好的页码 */ publicfunctionshowPages($style=1){ $func='pageStyle'.$style; return$this->$func(); } /** *pageStyle1分页样式(可参照这个添加自定义样式例如pageStyle2()) *样式共45条记录,每页显示10条,当前第1/4页[首页][上页][1][2][3]..[下页][尾页] *@returnstring */ protectedfunctionpageStyle1(){ /*构造普通模式的分页 共4523条记录,每页显示10条,当前第1/453页[首页][上页][1][2][3]..[下页][尾页] */ $pageStr='共'.$this->count.'条记录,每页显示'.$this->subPages.'条'; $pageStr.='当前第'.$this->currPage.'/'.$this->countPages.'页'; $_GET['page']=1; $pageStr.='<span>[<ahref="'.$this->href.'?'.http_build_query($_GET).'">首页</a>]</span>'; //如果当前页不是第一页就显示上页 if($this->currPage>1){ $_GET['page']=$this->currPage-1; $pageStr.='<span>[<ahref="'.$this->href.'?'.http_build_query($_GET).'">上页</a>]</span>'; } foreach($this->page_arras$k=>$v){ $_GET['page']=$k; $pageStr.='<span>[<ahref="'.$v.'">'.$k.'</a>]</span>'; } //如果当前页小于总页数就显示下一页 if($this->currPage<$this->countPages){ $_GET['page']=$this->currPage+1; $pageStr.='<span>[<ahref="'.$this->href.'?'.http_build_query($_GET).'">下页</a>]</span>'; } $_GET['page']=$this->countPages; $pageStr.='<span>[<ahref="'.$this->href.'?'.http_build_query($_GET).'">尾页</a>]</span>'; return$pageStr; } /** *construct_Pages生成页码数组 *键为页码,值为链接 *$this->page_arr=Array( *[1]=>index.php?page=1 *[2]=>index.php?page=2 *[3]=>index.php?page=3 *......) */ protectedfunctionconstruct_Pages(){ //计算总页数 $this->countPages=ceil($this->count/$this->subPages); //根据当前页计算前后页数 $leftPage_num=floor($this->showPages/2); $rightPage_num=$this->showPages-$leftPage_num; //左边显示数为当前页减左边该显示的数例如总显示7页当前页是5左边最小为5-3右边为5+3 $left=$this->currPage-$leftPage_num; $left=max($left,1);//左边最小不能小于1 $right=$left+$this->showPages-1;//左边加显示页数减1就是右边显示数 $right=min($right,$this->countPages);//右边最大不能大于总页数 $left=max($right-$this->showPages+1,1);//确定右边再计算左边,必须二次计算 for($i=$left;$i<=$right;$i++){ $_GET['page']=$i; $this->page_arr[$i]=$this->href.'?'.http_build_query($_GET); } } }
2.demo.php
<?php /** *分页类demo *Bethebestofwhateveryouare! * *@author:Dzer<358654744@qq.com> *@version:2014-12-2817:38:23 *@LastModifiedtime:2014-12-2818:08:28 */ header("content-type:text/html;charset=utf8"); include('./Page.class.php');//引入类 //$p=newPage(总页数,显示页数,当前页码,每页显示条数,[链接]); //连接不设置则为当前链接 $page=isset($_GET['page'])?$_GET['page']:1; $p=newPage(100,7,$page,8); //生成一个页码数组(键为页码,值为链接) echo"<pre>"; print_r($p->getPages()); //生成一个页码样式(可添加自定义样式) //样式共45条记录,每页显示10条,当前第1/4页[首页][上页][1][2][3]..[下页][尾页] echo$p->showPages(1);
以上就是本文的全部内容,希望对大家学习PHP程序设计有所帮助。