PHP完美分页类的实现

今天特意花很多时间整理了一下PHP的分页。

在写分页之前,应先对需要的参数进行一个理解,我们最后要做的,无非是limit以及分页模块功能的实现。

 总记录数total(通过数据库操作计算)、每页记录数listrows(自己设定)、当前页page(通过get传递)。

后期计算出来的参数:  limit左参数=(page-1)*listrows         总页数pageNum=ceil(total/listrows)

|

下面是分页类:


  
  '条记录','prev'=>'上一页','next'=>'下一页','first'=>'首页','last'=>'尾页');

	public function __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();
	}
	
	private function setLimit(){
		return "limit ".($this->page-1)*$this->listrows.','.$this->listrows;
	}

	public function getUri($pa){
	    $url = $_SERVER['REQUEST_URI'].(strpos($_SERVER['REQUEST_URI'],'?')?'':"?").$pa;
		$parse = parse_url($url);  //返回一个数组,数组有元素query和path
		if(isset($parse['query'])){
			parse_str($parse['query'],$params); //将query中的参数解析到$params,为数组
			unset($params['page']);
			$url = $parse['path'].'?'.http_build_query($params); //按照指定的参数生成一个请求字符串
		}
		return $url;
	}	 	

	//limit为私有属性,通过这个魔术方法使limit变得可用
	private function __get($args){
		if($args=="limit"){
			return $this->limit;
		}else{
			return null;
		}
	}

	private function first(){
		if($this->page==1){
			$html.='';
		}else{
		    $html.=" {$this->config['first']} ";
		}
		return $html;
	}

	private function prev(){
		if($this->page==1){
			$html.='';
		}else{
		    $html.=" {$this->config['prev']} ";
		}
		return $html;
	}

	private function pagelist(){
		$linkPage='';
		//每边显示inum个页码
		$inum = 3;
		//左边的页码
		for($i=$inum;$i>=1;$i--){
			$page = $this->page-$i;
			if($page<1){
				continue;
			}else{
				$linkPage.=" {$page} ";
			}
		}
		//当前页码
		$linkPage.=" {$this->page} ";
		//右边页码
		for($i=1;$i<=$inum;$i++){
			$page = $this->page+$i;
			if($page>$this->pageNum){
				break;
			}else{
				$linkPage.=" {$page} ";
			}
		}
		return $linkPage;
	}

	private function next(){
		if($this->page==$this->pageNum){
			$html.='';
		}else{
		    $html.=" {$this->config['next']} ";
		}
		return $html;
	}

	private function last(){
		if($this->page==$this->pageNum){
			$html.='';
		}else{
		    $html.=" {$this->config['last']} ";
		}
		return $html;
	}

	private function goPage(){
		return '  
		
		  ';
	}

	//*可见的成员方法
	function fpage($arr=array(0,1,2,3,4,5,6,7)){
		$html[0]=" 共有{$this->total}{$this->config['header']} ";
		$html[1]=" {$this->page}/{$this->pageNum}页 ";
		$html[2]=$this->first();
		$html[3]=$this->prev();
		$html[4]=$this->pageList();
		$html[5]=$this->next();
		$html[6]=$this->last();
		$html[7]=$this->goPage();
		$fpage='';
		foreach($arr as $index){
			$fpage.=$html[$index];
		}
		return $fpage;
	}






}

       

在使用时,引入分页类文件,连接数据库

①获得总行数 $sql="select * from ecs_goods";     $rst = mysql_query($sql);       $total = mysql_num_rows($rst); 

② 实例化分页类对象   $page = new Page($total,$listrows);  

③ 使用sql语句,实现limit          $sql="...{$page->limit}" ;        $rst = mysql_query($sql);

④ 可以将数组遍历,便于显示,可以放入table中

⑤ 最后是分页的显示      $page->fpage()    参数是一个数组,对应不同的功能,个人喜好自选。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值