| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 | 
							- <?php
 
- namespace KIF\Page;
 
- /**
 
-  * 分页类
 
-  * 需设定以下样式:
 
-  * page-prev:上一页
 
-  * page-next:下一页
 
-  * page-more:更多,即...
 
-  * page-current:当前页
 
-  * @author gaoxiaogang@gmail.com
 
-  */
 
- use KIF\Verify;
 
- use Exception;
 
- class Page {
 
- 	/**
 
- 	 * 
 
- 	 * 总页数
 
- 	 * @var int
 
- 	 */
 
- 	protected $pages;
 
- 	
 
- 	/**
 
- 	 * 
 
- 	 * 当前页
 
- 	 * @var int
 
- 	 */
 
- 	protected $page;
 
- 	
 
- 	protected $first_num = 2;
 
- 	
 
- 	protected $end_num = 2;
 
- 	
 
- 	protected $nearby_num = 2;
 
- 	
 
- 	/**
 
- 	 * 
 
- 	 * url模版
 
- 	 * 必须用 {page} 代表页码占位符。比如 http://misc.kimiss.com/comments/19933/{page}
 
- 	 * @var string
 
- 	 */
 
- 	protected $url_tpl;
 
- 	
 
- 	/**
 
- 	 * 
 
- 	 * Enter description here ...
 
- 	 * @param int $nums 总结果数量
 
- 	 * @param string $url_tpl url模版,必须用 {page} 代表页码占位符。比如 http://misc.kimiss.com/comments/19933/{page}
 
- 	 * @param int $page 当前页码
 
- 	 * @param int $size 每页显示多少个
 
- 	 * @return Page
 
- 	 */
 
- 	public function __construct($nums, $url_tpl, $cur_page = 1, $size = 20) {
 
- 		if (!Verify::unsignedInt($cur_page)) {
 
- 			throw new Exception("invalid cur_page param: {$cur_page}");
 
- 		}
 
- 		$this->pages = ceil($nums/$size);
 
- 		if ($cur_page > $this->pages) {
 
- 			$cur_page = $this->pages;
 
- 		}
 
- 		$this->page = $cur_page;
 
- 		$this->url_tpl = $url_tpl;
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 
 
- 	 * 获取指定页面的url
 
- 	 * @param int $page
 
- 	 * @return string
 
- 	 */
 
- 	private function pageUrl($page) {
 
- 		$url = str_replace('{page}', $page, $this->url_tpl);
 
- 		$url = str_replace('%7Bpage%7D', $page, $url);// 支持url被转义后的
 
- 		return $url;
 
- 	}
 
- 	
 
- 	public function html() {
 
- 		$html = '';
 
- 		
 
- 		# 显示上一页
 
- 		if ($this->page > 1) {
 
- 			$prev_page = $this->page - 1;
 
- 			$html .= <<<PAGE
 
- 				<a class="page-prev" data-page="{$prev_page}" href="{$this->pageUrl($prev_page)}">
 
- 				上一页
 
- 				<i></i>
 
- 				</a>
 
- PAGE;
 
- 		}
 
- 		
 
- 		# 显示第1、2页
 
- 		for ($i=1; $i<=$this->first_num; $i++) {
 
- 			if ($i >= $this->page-$this->nearby_num) {
 
- 				continue;
 
- 			}
 
- 			$html .= <<<PAGE
 
- 				<a data-page="{$i}" href="{$this->pageUrl($i)}">
 
- 				{$i}
 
- 				</a>
 
- PAGE;
 
- 		}
 
- 		
 
- 		if ($this->page > ($this->first_num+$this->nearby_num+1)) {
 
- 			$html .= '<span class="page-more">...</span>';
 
- 		}
 
- 		
 
- 		for ($i=$this->page-$this->nearby_num; $i <= $this->page+$this->nearby_num; $i++ ) {
 
- 			if ($i < 1) {
 
- 				continue;
 
- 			}
 
- 			if ($i > $this->pages) {
 
- 				continue;
 
- 			}
 
- 			if ($i == $this->page) {
 
- 				$html .= "<span class=\"page-current\">{$i}</span>";
 
- 			} else {
 
- 				$html .= <<<PAGE
 
- 				<a data-page="{$i}" href="{$this->pageUrl($i)}">
 
- 				{$i}
 
- 				</a>
 
- PAGE;
 
- 			}
 
- 		}
 
- 		
 
- 		if ($this->page < $this->pages-$this->end_num-$this->nearby_num) {
 
- 			$html .= '<span class="page-more">...</span>';
 
- 		}
 
- 		
 
- 		# 显示倒数第1、2页
 
- 		for ($i=$this->pages-$this->end_num+1; $i<=$this->pages; $i++) {
 
- 			if ($i <= $this->page+$this->nearby_num) {
 
- 				continue;
 
- 			}
 
- 			$html .= <<<PAGE
 
- 				<a data-page="{$i}" href="{$this->pageUrl($i)}">
 
- 				{$i}
 
- 				</a>
 
- PAGE;
 
- 		}
 
- 		
 
- 		# 显示下一页
 
- 		if ($this->page < $this->pages) {
 
- 			$next_page = $this->page + 1;
 
- 			$html .= <<<PAGE
 
- 				<a class="page-next" data-page="{$next_page}" href="{$this->pageUrl($next_page)}">
 
- 				下一页
 
- 				<i></i>
 
- 				</a>
 
- PAGE;
 
- 		}
 
- 		
 
- 		return $html;
 
- 	}
 
- }
 
 
  |