• 技术文章 >php教程 >PHP源码

    超好用的PHP分页类(可自定义样式)

    PHP中文网PHP中文网2016-05-23 16:39:04原创642
    getPages()); //生成一个页码数组(键为页码,值为链接)
     * echo $p->showPages(1);	//生成一个页码样式(可添加自定义样式)
     * 
     * @author: Dzer* @version: 2014-12-25 09:09:42
     * @Last Modified time: 2014-12-28 17:37:13
     */
    
    /*
    思路:
    给我一个 总页数,需要显示的页数,当前页,每页显示的条数,连接
    写一个方法 生成一个一维数组,键为页码 值为连接
    写一个方法 返回一个生成好样式的页码(并且可以根据自己需要添加样式)
    默认样式 共45条记录,每页显示10条,当前第1/4页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]
    */
    class Page{
    	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();
    	}
    
    	/**
    	 * pageStyle1 分页样式(可参照这个添加自定义样式 例如pageStyle2())
    	 * 样式 共45条记录,每页显示10条,当前第1/4页 [首页] [上页] [1] [2] [3] .. [下页] [尾页] 
    	 * @return string 
    	 */
    	protected function pageStyle1(){
    		/* 构造普通模式的分页 
       		共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [1] [2] [3] .. [下页] [尾页] 
       		*/ 
       		$pageStr='共'.$this->count.'条记录,每页显示'.$this->subPages.'条';
       		$pageStr.='当前第'.$this->currPage.'/'.$this->countPages.'页 ';
    
       		$_GET['page'] = 1;
       		$pageStr.='[href.'?'.http_build_query($_GET).'" _href="'.$this->href.'?'.http_build_query($_GET).'">首页] ';
       		//如果当前页不是第一页就显示上页
       		if($this->currPage>1){
       			$_GET['page'] = $this->currPage-1;
       			$pageStr.='[href.'?'.http_build_query($_GET).'" _href="'.$this->href.'?'.http_build_query($_GET).'">上页] ';
       		}
    
       		foreach ($this->page_arr as $k => $v) {
       			$_GET['page'] = $k;
       			$pageStr.='['.$k.'] ';
       		}
    
       		//如果当前页小于总页数就显示下一页
       		if($this->currPagecountPages){
       			$_GET['page'] = $this->currPage+1;
       			$pageStr.='[href.'?'.http_build_query($_GET).'" _href="'.$this->href.'?'.http_build_query($_GET).'">下页] ';
    		}
    
    		$_GET['page'] = $this->countPages;
       		$pageStr.='[href.'?'.http_build_query($_GET).'" _href="'.$this->href.'?'.http_build_query($_GET).'">尾页] ';
    
       		return $pageStr;
    	}
    
    	/**
    	 * construct_Pages 生成页码数组
    	 * 键为页码,值为链接
    	 * $this->page_arr=Array(
    	 *  				[1] => index.php?page=1
    	 *   	  			[2] => index.php?page=2
    	 *    	    		[3] => index.php?page=3
    	 *     	     		......)
    	 */
    	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 page_arr[$i]=$this->href.'?'.http_build_query($_GET);
    		}
    	}
    }


    <?php
    /**
     * 分页类demo
     * Be the best of whatever you are!
     * 
     * @author: Dzer* @version: 2014-12-28 17:38:23
     * @Last Modified time: 2014-12-28 18:08:28
     */
    header("content-type:text/html;charset=utf8");
    include('./Page.class.php');	//引入类
    
    //$p=new Page(总页数,显示页数,当前页码,每页显示条数,[链接]);
    //连接不设置则为当前链接
    $page=isset($_GET['page']) ? $_GET['page'] : 1;
    $p=new Page(100,7,$page,8);
    
    //生成一个页码数组(键为页码,值为链接)
    echo "";
    print_r($p->getPages()); 
    
    //生成一个页码样式(可添加自定义样式)
    //样式 共45条记录,每页显示10条,当前第1/4页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]
    echo $p->showPages(1);	
    				    				            	            	

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:ThinkPHP3.2.3实现手机摇一摇随机推荐效果 下一篇:假设有如下数组 $words=array("肯","德","基");
    Web大前端开发直播班

    相关文章推荐

    • 剖析PHP中的输出缓冲 flush之类• 戏说PHP框架的味道• PHP总结我的简单静态页生成 过程,• 整理php操作memcache缓存基础方法• PHP常用用的六个处理正则表达式函数

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网