一个简单好用的php分页类

在列表翻页实现中常会用到分页设计,这是一个简单易用的php的分页类,摘录参考。(来自《PHP典型模块与项目实战大全》第17章)

 

<?
/**************************************/
/*		@ Pager						  */
/*		@ 							  */
/*		@ Designer AnVy				  */
/**************************************/
class listPage
{
	//public
	var $firstPage;
	var $endPage;
	var $lastPage;
	var $nextPage;
	var $thisPage;
	var $pageSize;
	var $rowNum;
	var $listNum;
	var $cssClass;
	var $splitStr;
	
	var $pageLast;
	var $pageNext;
	var $pageFirst;
	var $pageEnd;
	var $pageList;
	var $pageSelect;
	var $pageAll;
	
	var $links;
	
	function __construct($rowNum,$pageSize = '10',$listNum = '8')
	{
		$this->rowNum = $rowNum;
		$this->pageSize = $pageSize;
		$this->listNum = $listNum;
		$this->splitStr = '&nbsp;';
		$this->lastPage = '上一页';
		$this->nextPage = '下一页';
		$this->firstPage = '首页';
		$this->endPage = '末页';
		$this->thisPage = $_GET['page'] ? $_GET['page'] : 1;
	}
	
	function getStrWhere()
	{
		$temp = array();
		foreach ($_GET as $key=>$val)
			if($key != 'page') $temp[] = urlencode($key) . '=' . urlencode($val);
		foreach ($_POST as $key=>$val)
			$temp[] = urlencode($key) . '=' . urlencode($val);
		$str = @ join('&',$temp);
		unset($temp);
		return $str;
	}
	
	function getPageNum()
	{
		if ($this->thisPage < 1)
			$this->thisPage = 1;
		if ($this->rowNum < 1)
			return 1;
		return ceil($this->rowNum/$this->pageSize);
	}
	
	function createSelect($s,$e)
	{
		$temp = array();
		$temp[] = '<select class="'.$this->cssClass.'" onchange="window.location=this.options[this.selectedIndex].value">';
		for($i = $s ; $i <= $e;$i ++)
			$temp[] = '<option value="?page='.$i.'&'.$this->getStrWhere().'" '.(($i == $this->thisPage)?'selected':'').'>'.$i;
		$temp[] = '<select>';
		return join(chr(13),$temp);		
	}
	
	function createPage()
	{
		$strWhere = $this->getStrWhere();
		$lastPage = $this->lastPage;
		$firstPage = $this->firstPage;
		$endPage = $this->endPage;
		$nextPage = $this->nextPage;
		$thisPage = $this->thisPage;
		$pageNum = $this->getPageNum();
		$listNum = $this->listNum;

		$startNum = $thisPage - (ceil($listNum/2)-1);
		if ($startNum < 1 ) $startNum = 1;
		$endNum = $startNum + $listNum - 1;
		if ($endNum > $pageNum) $endNum = $pageNum;
		
	
		$this->links['first'] ='?'.$strWhere.'&page=1';
		$this->links['last'] ='?'.$strWhere.'&page='.(($thisPage-1<1)?1:($thisPage-1));
		$this->links['next'] ='?'.$strWhere.'&page='.(($thisPage+1>$pageNum)?$pageNum:($thisPage+1));
		$this->links['end'] ='?'.$strWhere.'&page='.$pageNum;
		$this->pageFirst = '<a href="'.$this->links['first'].'" class="'.$this->cssClass.'">'.$firstPage.'</a>'.$this->splitStr;
		$this->pageLast = '<a href="'.$this->links['last'].'" class="'.$this->cssClass.'">'.$lastPage.'</a>';
		$this->pageNext = '<a href="'.$this->links['next'].'" class="'.$this->cssClass.'">'.$nextPage.'</a>';
		$this->pageEnd = $this->splitStr.'<a href="'.$this->links['end'].'" class="'.$this->cssClass.'">'.$endPage.'</a>';
		
		$pageList;
		
		for($i = $startNum ; $i <= $endNum ; $i ++)
			if ($thisPage != $i)
				$pageList[] = '<a href="?'.$strWhere.'&page='.$i.'" class="'.$this->cssClass.'">'.$i.'</a>';
			else
				$pageList[] = '<a class="'.$this->cssClass.'"><b>'.$i.'</b></a>';
		$this->pageList = @ join($this->splitStr,$pageList);
		$this->pageSelect = $this->createSelect($startNum,$endNum);
		$this->pageAll = $this->pageFirst.$this->splitStr.$this->pageLast.$this->splitStr.$this->pageList.$this->splitStr.$this->pageNext.$this->splitStr.$this->pageEnd.$this->splitStr.$this->pageSelect;			
	}
}
?>

用法示例:

$obj = new listPage(22222222);
$obj->createPage();
echo $obj->pageAll;

 

点赞 (0)
  1. 我又来了,真的喜欢上楼主的文章了,很吸引人,比一般的文章感觉更真实,读起来很贴近生活,楼主继续努力,你拥有我们这些忠实的粉丝!加油!

  2. 木本无心说道:

    哈,php什么的,不懂。。。
    [reply=任侠,2012-09-20 05:02 PM]语言已其实都差不多
    最近实习在搞这个[/reply]

  3. 猫她妈说道:

    大哥为什么不配个图呢?

发表评论

电子邮件地址不会被公开。 必填项已用*标注