正文

php实现通用分页类


[前言]


php实现通用分页类,虽然很多框架都自带分页类,但通用第三方写的分页类更灵活,动态分页,主要核心逻辑就是,根据url获取page参数,来输出前后页数,并将当前页面page样式显示为active选中状态

[功能]


* 动态生成分页

* 自定义显示分页按钮数量

* 支持多种按钮样式二次开发

* 首页、尾页按钮自动显示或隐藏

* 自定义按钮url,并自动判断是否已有参数,拼接相应连接符

[代码]


class myPage{
	protected $count; //总条数
	protected $showPages; //需要显示的页数
	protected $countPages; //总页数
	protected $currPage; //当前页
	protected $subPages; //每页显示条数
	protected $href; //连接
	protected $page_arr=array(); //保存生成的页码 键页码 值为连接

	/**
	* __construct 构造函数(获取分页所需参数)
	* @param int $count 总条数
	* @param int $showPages 显示页数
	* @param int $currPage 当前页数
	* @param int $subPages 每页显示数量
	* @param string $href 连接(不设置则获取当前URL)
	*/
	public function __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 返回页码数组
	* @return array 一维数组 键为页码 值为链接
	*/
	public function getPages(){
		return $this->page_arr;
	}

	/**
	* showPages 返回生成好的页码
	* @param int $style 样式
	* @return string 生成好的页码
	*/
	public function showPages($style=1){
		$func='pageStyle'.$style;
		return $this->$func();
	}

	/**
	* @return string
	*/
	protected function pageStyle1(){

		$pageStr='';
		$parameter=(strpos($this->href, '?')==false) ? '?':'&';

		if($this->currPage!=1){
			$pageStr='
  • 首页
  • '; } //如果当前页不是第一页就显示上页 if($this->currPage>1){ // $pageStr.='
  • 上页
  • '; } foreach ($this->page_arr as $k => $v) { if($this->currPage==$k){ $pageStr.='
  • '.$k.'
  • '; } else{ $pageStr.='
  • '.$k.'
  • '; } } //如果当前页小于总页数就显示下一页 if($this->currPage<$this->countPages){ // $pageStr.='
  • 下页
  • '; } if($this->currPage!=$this->countPages){ $pageStr.='
  • 尾页
  • '; } if($this->href=='/'){ $pageStr=str_replace('&','?',$pageStr); } return $pageStr; } /** * construct_Pages 生成页码数组 */ protected function construct_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['p'] = $i; $this->page_arr[$i]=$this->href.'?'.http_build_query($_GET); } } } // 实例化myPage类 $count=100; $showPages=4; $currPage=isset($_GET['p']) ? $_GET['p']:1; $subPages=10; $href=''; $res=new myPage($count,$showPages,$currPage,$subPages,$href);; $showPage=$res->showPages(1); // 基于boostrap5 css样式 echo '<link rel="stylesheet" href="style.css">'; echo '<div class="mt-4" style="text-align:center;"><h1>content-page-'.$currPage.'</h1><p><nav aria-label="navigation"><ul class="pagination pagination-light d-inline-block d-md-flex justify-content-center">'; echo $showPage; echo '</ul></nav></div>'; // 很多逻辑判断,因为用不到,暂时被注释,可自行修改

    [环境]


    php v5.6或更高版本

    [预览]


    [下载]


    下载链接

    下载地址

    评论
    还没有评论
    留言