ThinkPHP实现分页功能
前几篇(上传,缩略图,验证码,自动验证表单)文章介绍的功能实现都是基于ThinkPHP框架封装好的类进行实现的,所以这次自己写一个分页类在框架中使用。
首先在根目录建一个Tools文件夹,在Tools文件夹下建Page.class.php类文件,这样以后自定义的工具类都可放在Tools文件夹下。
此类封装有以下函数:获取请求地址,开始页,从哪一条显示,结束页从哪一条结束,页码列表(首页超链接,上一页,页码数字列表超链接,下一页,尾页,跳转),对于分页足够使用!
下面是Page.class.php代码
"个记录","prev"=>"上一页","next"=>"下一页","first"=>"首页","last"=>"尾页"); private$listNum=8;//限制页码列表数目 /* *$total总记录数 *$listRows每页显示行数 */ publicfunction__construct($total,$listRows=10,$pa=""){ $this->total=$total;//数据表中总记录数 $this->listRows=$listRows;//设置每页显示行数 $this->uri=$this->getUri($pa);//请求地址 $this->page=!empty($_GET["page"])?$_GET["page"]:1;//当前页 $this->pageNum=ceil($this->total/$this->listRows);//总页数 $this->limit=$this->setLimit();//限制每页长度 } privatefunctionsetLimit(){ return"Limit".($this->page-1)*$this->listRows.",{$this->listRows}"; } //请求地址 privatefunctiongetUri($pa){ $url=$_SERVER["REQUEST_URI"].(strpos($_SERVER["REQUEST_URI"],'?')?'':"?").$pa; $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; } function__get($args){ if($args=="limit") return$this->limit; else returnnull; } //开始页,从哪一条显示 privatefunctionstart(){ if($this->total==0) return0; else return($this->page-1)*$this->listRows+1; } //从哪一条结束 privatefunctionend(){ returnmin($this->page*$this->listRows,$this->total); } //首页超链接 privatefunctionfirst(){ $html=""; if($this->page==1) $html.=''; else $html.="uri}&page=1'>{$this->config["first"]} "; return$html; } //上一页 privatefunctionprev(){ $html=""; if($this->page==1) $html.=''; else $html.=" uri}&page=".($this->page-1)."'>{$this->config["prev"]} "; return$html; } //页码数字列表超链接 privatefunctionpageList(){ $linkPage=""; $inum=floor($this->listNum/2); for($i=$inum;$i>=1;$i--){ $page=$this->page-$i; if($page<1) continue; $linkPage.=" uri}&page={$page}'>{$page} "; } $linkPage.=" {$this->page} "; for($i=1;$i<=$inum;$i++){ $page=$this->page+$i; if($page<=$this->pageNum) $linkPage.=" uri}&page={$page}'>{$page} "; else break; } return$linkPage; } //下一页 privatefunctionnext(){ $html=""; if($this->page==$this->pageNum) $html.=''; else $html.=" uri}&page=".($this->page+1)."'>{$this->config["next"]} "; return$html; } //尾页 privatefunctionlast(){ $html=""; if($this->page==$this->pageNum) $html.=''; else $html.=" uri}&page=".($this->pageNum)."'>{$this->config["last"]} "; return$html; } //跳转 privatefunctiongoPage(){ return' '.$this->pageNum.')?'.$this->pageNum.':this.value;location=\''.$this->uri.'&page=\'+page+\'\'}"value="'.$this->page.'"style="width:25px"> '.$this->pageNum.')?'.$this->pageNum.':this.previousSibling.value;location=\''.$this->uri.'&page=\'+page+\'\'"> '; } //页码列表 functionfpage($display=array(0,1,2,3,4,5,6,7,8)){ $html[0]=" 共有{$this->total}{$this->config["header"]} "; $html[1]=" 每页显示".($this->end()-$this->start()+1)."条,本页{$this->start()}-{$this->end()}条 "; $html[2]=" {$this->page}/{$this->pageNum}页 "; $html[3]=$this->first(); $html[4]=$this->prev(); $html[5]=$this->pageList(); $html[6]=$this->next(); $html[7]=$this->last(); $html[8]=$this->goPage(); $fpage=''; foreach($displayas$index){ $fpage.=$html[$index]; } return$fpage; } }
控制器代码:
//商品列表 functionshowlist(){ //实现分页效果 $goods=D('goods'); //①获得数据的总记录条数 $total=$goods->count();//selectcount(*)fromsw_goods; $per=7;//每页显示7条记录 //②实例化分页类 $page_obj=new\Tools\Page($total,$per); //③自定义sql语句,获取每页信息 $sql="select*fromsw_goodsorderbygoods_iddesc".$page_obj->limit; $info=$goods->query($sql); //④获取页码列表 $pagelist=$page_obj->fpage(array(3,4,5,6,7,8)); //分配 $this->assign('pagelist',$pagelist); $this->assign('info',$info); $this->display(); }
前台显示代码
<{$pagelist}>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。