天天看點

PHP進階實戰分頁類

咱們接着上一篇的繼續說

今天開始做

php分頁類

話不多說直接代碼

<?php

// $page=new Page(5,60);
// var_dump($page->allUrl());
class Page{
	//每頁顯示多少資料
	protected $number;
	//一共多少資料
	protected $totalCount;
	//目前頁
	protected $page;
	//總頁數
	protected $totalPage;
	//url
	protected $url;


	public function __construct($number,$totalCount){
		$this->number=$number;
		$this->totalCount=$totalCount;
		//得到總頁數
		$this->totalPage=$this->getTotalPage();
		//得到目前頁數
	    $this->page=$this->getPage();
	    //得到url
	    $this->url=$this->getUrl();
	    echo $this->url;
	}

	protected function getTotalPage(){
		return ceil($this->totalCount/$this->number);
	}
	protected function getPage(){
		if(empty($_GET['page'])){
			$page=1;

		}else if($_GET['page']>$this->totalPage){
			$page=$this->totalPage;
		}else if ($_GET['page']<1){
			$page=1;
		}else {
			$page=$_GET['page'];
		}
		return $page;
	}
	protected function getUrl(){
		//得到協定
		$scheme=$_SERVER['REQUEST_SCHEME'];
		//主機名
		$host=$_SERVER['SERVER_NAME'];
		//得到端口号
		$port=$_SERVER['SERVER_PORT'];
		//得到路徑和請求字元串
		$uri=$_SERVER['REQUEST_URI'];
		//中間處理 将page=5等這種字元串拼接url中,是以如果原來有page這個參數,我們首先需要将原來的page參數清空
		$uriArray=parse_url($uri);
		// var_dump($uriArray);
		$path=$uriArray['path'];
		if(!empty($uriArray['query'])){
			//首先将請求字元串變為關聯數組
			parse_str($uriArray['query'],$array);
			//清除掉關聯數組中的page鍵值對
			unset($array['page']);
            //将剩下的參數拼接為請求字元串
			$query=http_build_query($array);
			//再将請求字元串拼接到路徑的後面
			if($query!=''){
				$path= $path.'?'.$query;
			}
		}
		return $scheme.'://'.$host.':'.$port .$path;


	}
	protected function setUrl($str){
		if(strstr($this->url, '?')){
			$url=$this->url.'&'.$str;
		}else {
			$url=$this->url.'?'.$str;
		}
		return $url;
	}


	public function allUrl(){
		return [
            'first'=>$this->first(),
            'prev'=>$this->prev(),
            'next'=>$this->next(),
            'end'=>$this->end(),
		];

	}
	public function first(){
		return $this->setUrl('page=1');

	}
	public function next(){
		if($this->page+1>$this->totalPage){
			$page =$this->totalPage;
		}else{
			$page=$this->page+1;
		}
		return $this->setUrl('page='.$page);

	}
	public function prev(){
		if($this->page-1<1){
			$page=1;

		} else {
			$page=$this->page-1;
		}
		return $this->setUrl('page='.$page);

	}
	public function end(){
		return $this->setUrl('page='.$this->totalPage);

	}
	public function limit(){
		//limit0,5 limit 5,5
		$offset=($this->page-1)*$this->number;
		return $offset.','.$this->number;
	}
}
           
PHP進階實戰分頁類

總結:每天進步一點點