<?php/**@author: ray*@e-mail: ningbo.zhang@qq.com*@date: 2016-3-29*@explain: 自适应分页类**/class page { public $total;//总记录 public $pagesize;//每页大小 public $page;//当前页 public $pages;//总页数 public $link;//显示的页码数 1 2 3 4 5 6 public $left;//显示页码的左边数目 public $right;//显示页码的右边数目 public $pageid;//传值的变量名 public $prev;//上一页 public $next;//下一页 public $gp;//传值的方式 get/post public $start;//中间显示页码的开始页码数 public $end;//中间显示页码的结束页码数 //渲染主题 public $theme=array('first','prev','link','next','last','total','info'); //构造方法 public function __construct($num, $pagesize, $link=7, $pageid='page', $gp='g'){ $this->total=$num; $this->pagesize=$pagesize; $this->link=$link; $this->pageid=$pageid; $this->gp=$gp; $this->rule(); } //计算页码 public function rule(){ //计算总页数 $this->pages=ceil($this->total/$this->pagesize); //获得当前页 if($this->gp=='g'){//get $this->page=isset($_get[$this->pageid])?$_get[$this->pageid]:1; }else{//post $this->page=isset($_post[$this->pageid])?$_post[$this->pageid]:1; } //约束当前页边界 $this->constraint(); //上下页 $this->prev=$this->page-1; $this->next=$this->page+1; //计算中间页码的开始和结束的页码数 //计算左右显示的页码数 if($this->link%2){//link为奇数 $this->left=$this->right=($this->link-1)/2; }else{//link为偶数 $this->left=$this->link/2; $this->right=$this->link-$this->left-1; } //初始化 $this->start=1; $this->end=$this->pages; if($this->pages>$this->link){ //1.起始页为1 if($this->page<=$this->left){ $this->end=$this->link; } //2.中间 if(($this->page>$this->left) && (($this->page+$this->right)<$this->pages)){ $this->start=$this->page-$this->left+1; $this->end=$this->page+$this->right-1; } //3.结束页为pages if(($this->page+$this->right)>=$this->pages){ $this->start=$this->pages-$this->link+1; } } } //边界约束 public function constraint(){ if($this->page<1) $this->page=1; if($this->page>$this->pages) $this->page=$this->pages; } //获取当前页面的url public function geturl(){ return "http://".$_server['http_host'].($_server['server_port']!='80'?(':'.$_server['server_port']):'').$_server['php_self']; } //获取limit public function getlimit(){ return ($this->page-1)*$this->pagesize; } //改变主题 public function changetheme(array $theme){ $this->theme=$theme; } //渲染页码 <a> <span name='now'> public function show(array $arr=array()){ if(!count($arr)){ $arr=$this->theme; } $url=$this->geturl(); //首页、上一页约束 if($this->page==1){ $html['first']="<span>首页</span>"; $html['prev']="<span>上一页</span>"; }else{ $html['first']="<a href='".$url."?".$this->pageid."=1'>首页</a>"; $html['prev']="<a href='".$url."?".$this->pageid."=".$this->prev."'>上一页</a>"; } $str=''; //起始点页码 if($this->start!=1){ $str='<span>...</span>'; } for($i=$this->start;$i<=$this->end;$i++){ if($i==$this->page){ $str.="<span name='now'>$i</span>"; continue; } $str.="<a href='".$url."?".$this->pageid."=".$i."'>$i</a>"; } //结束点页码 if($this->end!=$this->pages){ $str.='<span>...</span>'; } $html['link']=$str; //下一页、末页约束 if($this->page==$this->pages){ $html['next']="<span>下一页</span>"; $html['last']="<span>末页</span>"; }else{ $html['next']="<a href='".$url."?".$this->pageid."=".$this->next."'>下一页</a>"; $html['last']="<a href='".$url."?".$this->pageid."=".$this->pages."'>末页</a>"; } $html['total']="共有".$this->total."条结果 "; $html['info']="当前为第".$this->page."/".$this->pages."页"; $res=''; foreach($arr as $v){ $res.=$html[$v]; } return $res; }}
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号