php分页类代码 Digg Style Paginator Class

<?php
class Pagination{
	/*
	Script Name: *Digg Style Paginator Class
	Script URI: http://www.mis-algoritmos.com/2007/05/27/digg-style-pagination-class/
	Description: Class in PHP that allows to use a pagination like a digg or sabrosus style.
	Script Version: 0.4
	Author: Victor De la Rocha
	Author URI: http://www.mis-algoritmos.com
	*/
	/*Default values*/
	var $total_pages = -1;//items
	var $limit = null;
	var $target = "";
	var $page = 1;
	var $adjacents = 2;
	var $showCounter = false;
	var $className = "pagination";
	var $parameterName = "page";
	var $urlF = false;//urlFriendly

	/*Buttons next and previous*/
	var $nextT = "Next";
	var $nextI = "»"; //►
	var $prevT = "Previous";
	var $prevI = "«"; //◄

	/*****/
	var $calculate = false;

	#Total items
	function items($value){$this->total_pages = (int) $value;}

	#how many items to show per page
	function limit($value){$this->limit = (int) $value;}

	#Page to sent the page value
	function target($value){$this->target = $value;}

	#Current page
	function currentPage($value){$this->page = (int) $value;}

	#How many adjacent pages should be shown on each side of the current page?
	function adjacents($value){$this->adjacents = (int) $value;}

	#show counter?
	function showCounter($value=""){$this->showCounter=($value===true)?true:false;}

	#to change the class name of the pagination div
	function changeClass($value=""){$this->className=$value;}

	function nextLabel($value){$this->nextT = $value;}
	function nextIcon($value){$this->nextI = $value;}
	function prevLabel($value){$this->prevT = $value;}
	function prevIcon($value){$this->prevI = $value;}

	#to change the class name of the pagination div
	function parameterName($value=""){$this->parameterName=$value;}

	#to change urlFriendly
	function urlFriendly($value="%"){
		if(preg_match('/^ *$/',$value)){
			$this->urlF=false;
			return false;
		}
		$this->urlF=$value;
	}

	var $pagination;

	function Pagination(){}
	function show(){
		if(!$this->calculate)
		if($this->calculate())
		return "<div class=\"$this->className\">$this->pagination</div>\n";
	}
	function getOutput(){
		if(!$this->calculate)
		if($this->calculate())
		return "<div class=\"$this->className\">$this->pagination</div>\n";
	}
	function get_pagenum_link($id){
		if(strpos($this->target,'?')===false)
		if($this->urlF)
		return str_replace($this->urlF,$id,$this->target);
		else
		return "$this->target?$this->parameterName=$id";
		else
		return "$this->target&$this->parameterName=$id";
	}

	function calculate(){
		$this->pagination = "";
		$this->calculate == true;
		$error = false;
		if($this->urlF and $this->urlF != '%' and strpos($this->target,$this->urlF)===false){
			//Es necesario especificar el comodin para sustituir
			echo "Especificaste un wildcard para sustituir, pero no existe en el target<br />";
			$error = true;
		}elseif($this->urlF and $this->urlF == '%' and strpos($this->target,$this->urlF)===false){
			echo "Es necesario especificar en el target el comodin % para sustituir el numero de pugina<br />";
			$error = true;
		}

		if($this->total_pages < 0){
			echo "It is necessary to specify the <strong>number of pages</strong> (\$class->items(1000))<br />";
			$error = true;
		}
		if($this->limit == null){
			echo "It is necessary to specify the <strong>limit of items</strong> to show per page (\$class->limit(10))<br />";
			$error = true;
		}
		if($error)return false;

		$n = trim($this->nextT.' '.$this->nextI);
		$p = trim($this->prevI.' '.$this->prevT);

		/* Setup vars for query. */
		if($this->page)
		$start = ($this->page - 1) * $this->limit;             //first item to display on this page
		else
		$start = 0;                                //if no page var is given, set start to 0

		/* Setup page vars for display. */
		$prev = $this->page - 1;                            //previous page is page - 1
		$next = $this->page + 1;                            //next page is page + 1
		$lastpage = ceil($this->total_pages/$this->limit);        //lastpage is = total pages / items per page, rounded up.
		$lpm1 = $lastpage - 1;                        //last page minus 1

		/*
		Now we apply our rules and draw the pagination object.
		We're actually saving the code to a variable in case we want to draw it more than once.
		*/

		if($lastpage > 1){
			if($this->page){
				//anterior button
				if($this->page > 1)
				$this->pagination .= "<a href=\"".$this->get_pagenum_link($prev)."\" class=\"prev\">$p</a>";
				else
				$this->pagination .= "<span class=\"disabled\">$p</span>";
			}
			//pages
			if ($lastpage < 7 + ($this->adjacents * 2)){//not enough pages to bother breaking it up
				for ($counter = 1; $counter <= $lastpage; $counter++){
					if ($counter == $this->page)
					$this->pagination .= "<span class=\"current\">$counter</span>";
					else
					$this->pagination .= "<a href=\"".$this->get_pagenum_link($counter)."\">$counter</a>";
				}
			}
			elseif($lastpage > 5 + ($this->adjacents * 2)){//enough pages to hide some
				//close to beginning; only hide later pages
				if($this->page < 1 + ($this->adjacents * 2)){
					for ($counter = 1; $counter < 4 + ($this->adjacents * 2); $counter++){
						if ($counter == $this->page)
						$this->pagination .= "<span class=\"current\">$counter</span>";
						else
						$this->pagination .= "<a href=\"".$this->get_pagenum_link($counter)."\">$counter</a>";
					}
					$this->pagination .= "...";
					$this->pagination .= "<a href=\"".$this->get_pagenum_link($lpm1)."\">$lpm1</a>";
					$this->pagination .= "<a href=\"".$this->get_pagenum_link($lastpage)."\">$lastpage</a>";
				}
				//in middle; hide some front and some back
				elseif($lastpage - ($this->adjacents * 2) > $this->page && $this->page > ($this->adjacents * 2)){
					$this->pagination .= "<a href=\"".$this->get_pagenum_link(1)."\">1</a>";
					$this->pagination .= "<a href=\"".$this->get_pagenum_link(2)."\">2</a>";
					$this->pagination .= "...";
					for ($counter = $this->page - $this->adjacents; $counter <= $this->page + $this->adjacents; $counter++)
					if ($counter == $this->page)
					$this->pagination .= "<span class=\"current\">$counter</span>";
					else
					$this->pagination .= "<a href=\"".$this->get_pagenum_link($counter)."\">$counter</a>";
					$this->pagination .= "...";
					$this->pagination .= "<a href=\"".$this->get_pagenum_link($lpm1)."\">$lpm1</a>";
					$this->pagination .= "<a href=\"".$this->get_pagenum_link($lastpage)."\">$lastpage</a>";
				}
				//close to end; only hide early pages
				else{
					$this->pagination .= "<a href=\"".$this->get_pagenum_link(1)."\">1</a>";
					$this->pagination .= "<a href=\"".$this->get_pagenum_link(2)."\">2</a>";
					$this->pagination .= "...";
					for ($counter = $lastpage - (2 + ($this->adjacents * 2)); $counter <= $lastpage; $counter++)
					if ($counter == $this->page)
					$this->pagination .= "<span class=\"current\">$counter</span>";
					else
					$this->pagination .= "<a href=\"".$this->get_pagenum_link($counter)."\">$counter</a>";
				}
			}
			if($this->page){
				//siguiente button
				if ($this->page < $counter - 1)
				$this->pagination .= "<a href=\"".$this->get_pagenum_link($next)."\" class=\"next\">$n</a>";
				else
				$this->pagination .= "<span class=\"disabled\">$n</span>";
				if($this->showCounter)$this->pagination .= "<div class=\"pagination_data\">($this->total_pages Pages)</div>";
			}
		}
		return true;
	}
}
?>

使用说明:http://mis-algoritmos.com/2007/05/27/digg-style-pagination-class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值