<?php
/**
 * 分页类
 *
 * @author      myblessu <sc@lin.net.cn>
 * @version     1.0
 * @lastupdate  2003-09-26
 *
 *
 * 使用实例:
 * $p = new page;		//建立新对像
 * $p->setpage(1);		//设置当前页为1页
 * $p->setpagesize(10);		//设置每页显示信息数，默认是10条
 * $p->settotal(200);		//设置信息总数
 * $p->setunit('条');		//设置分页信息单位，默认是条
 * $p->setinfo('信息');		//设置分页信息名称，默认是信息
 * $p->settablewidth('100%');	//设置显示宽度，默认是100%
 * $p->settablealign('center');	//设置显示对齐方式，默认是居中对齐
 * $p->settablecss('');		//设置文字的显示样式
 * $p->setall(page,total,pagesize,unit,info,tablewidth,tablealign,tablecss);
 *				//同时设置8个参数：
 *				1.当前页
 *				2.每页显示数
 *				3.信息总数
 *				4.信息单位
 *				5.信息名称
 *				6.显示宽度
 *				7.对齐方式
 *				8.文字样式
 *
 * $p->printpage($para1,$para2,$para3);
 *				//打印分页，共三个参数：
 *				1.传递的变量数组，可选。
 *					示例：共传递两个变量
 *					$para1[0][0]="random";	  //$para1[0][0]存放random变量名
 *					$para1[0][1]=$random;	  //$para1[0][1]存放random变量值
 *					$para1[1][0]="BigClass";  //$para1[1][0]存放BigClass变量名
 *					$para1[1][1]=$BigClass;   //$para1[1][1]存放BigClass变量值
 *				2.显示样式，可选
 *				3.是否显示分页说明信息，默认是显示
 *
 */
 
 
class page{

	var $page;			//当前页
	var $pagesize=10;		//每页显示数目
	var $total;			//总共条数

	var $unit="";			//分页信息单位
	var $info="";		//说明信息
	var $tablewidth="100%";		//表格宽度
	var $tablealign="center";	//表格对齐方式
	var $tablecss;			//表格样式;
	
	var $output;			//输出	
	var $lang;
	
	function page(){
		global $page,$total,$lang;
		$this->unit = $lang['page.class.str1'];
		$this->info = $lang['page.class.str2'];
		$this->page=$page;
		$this->total=$total;
	}

	function setpage($page){
		$this->page=$page;
	}
	
	function setpagesize($pagesize){
		$this->pagesize=$pagesize;
	}
	
	function settotal($total){
		$this->total=$total;
	}
	
	function setunit($unit){
		$this->unit=$unit;
	}
	
	function setinfo($info){
		$this->info=$info;
	}
	
	function settablewidth($tablewidth){
		$this->tablewidth=$tablewidth;
	}
	
	function settablealign($tablealign){
		$this->tablealign=$tablealign;
	}
	
	function settablecss($tablecss){
		$this->tablecss=$tablecss;
	}
	
	function setall($page,$total,$pagesize,$unit,$info,$tablewidth,$tablealign,$tablecss){
		$this->page=$page;
		$this->total=$total;
		$this->pagesize=$pagesize;
		$this->unit=$unit;
		$this->info=$info;
		$this->tablewidth=$tablewidth;
		$this->tablealign=$tablealign;
		$this->tablecss=$tablecss;
	}
	
	
	function printpage($paraArr=null,$css=null,$showtop=1){
		global $lang;
		if (!is_numeric($this->page)){
			$this->err($lang['page.str3']);
			return;
		}
		if (!is_numeric($this->pagesize)){
			$this->err($lang['page.str4']);
			return;
		}
		if (!is_numeric($this->total)){
			$this->err($lang['page.str5']);
			return;
		}
		
		if ($css==null){
			$this->returnpage($paraArr,$showtop);
			echo $this->output;
		}else{
			if (is_int($css)){
				$this->returnpage1($paraArr,$showtop);
				echo $this->output;
			}else{
				$this->err($lang['page.str6']);
			}
		}
	}

	function _printHiddenForm($arr=array()){
		if( empty($arr) ){
			global $_POST;
			$arr =& $_POST;
			foreach( $arr as $name => $val ){
				if( is_array($val) && !empty($val) ){
					_printHiddenForm($val);
				} else{
					echo '<input type="hidden" name="'.$name.'" value="'.urlencode($val).'">';
				}
			}
		}
	}
	
	function returntop(){
		global $lang;
		$this->output.="<table width=".$this->tablewidth." border=0 cellspacing=0 cellpadding=0 align='".$this->tablealign."' class='".$this->tablecss."'>\n";
		$this->output.="<tr><td align=right height=20>{$lang['page.class.str3']}<b>".$this->pagesize."</b> ".$this->unit."{$lang['page.class.str4']} <b>".$this->total."</b> ".$this->unit.$this->info."</td></tr>\n";
		$this->output.="</table>\n";
	}
	
	function returngoPage(){
		$this->output.="<script>\n";
		$this->output.="function goPage(page){\n";
		$this->output.="	document.goPageform.page.value=page;\n";
		$this->output.="	document.goPageform.submit();\n";
		$this->output.="}\n";
		$this->output.="</script>\n";	
	}
	
	//显示：页次：1/1 页    分页：首页 上一页 下一页 尾页   转到：页 
	function returnpage($paraArr,$showtop){
		global $lang;
		$p=floor(($this->page-1) / 10);
		$pagecount=ceil($this->total / $this->pagesize);
		
		if ($showtop) $this->returntop();
		$this->output.="<table width=".$this->tablewidth." border=0 cellspacing=0 cellpadding=0 align='".$this->tablealign."' class='".$this->tablecss."'>\n";
		$this->returngoPage();
		$this->output.="<form name=goPageform method=Post>\n";
		
		for ($i=0;$i<count($paraArr);$i++){
			$this->output.="<input type=hidden name=".$paraArr[$i][0]." value=\"".$paraArr[$i][1]."\">\n";	
		}
		
		$this->output.="<tr><td>".$lang['page.str7']."<font color=red>".$this->page."</font>/".$pagecount." ".$lang['page.str9']."&nbsp;";
		$this->output.="</td><td align=right>".$lang['page.str8']."\n";
		
		if ($this->page<=1){
			$this->output.=$lang['page.str10']."&nbsp;".$lang['page.str11']."&nbsp;";
		}else{
			$this->output.="<a href=\"javascript:goPage('1');\" title=\"".$lang['page.str12']."\">".$lang['page.str10']."</a>&nbsp;";
   			$this->output.="<a href=\"javascript:goPage('".($this->page-1)."');\" title=\"".$lang['page.str11']."\">".$lang['page.str11']."</a>&nbsp;";
   		}

		if (($this->page+1)>$pagecount){
			$this->output.=$lang['page.str13']."&nbsp;".$lang['page.str15']."\n";
		}else{
			$this->output.="<a href=\"javascript:goPage('".($this->page+1)."');\" title=\"".$lang['page.str13']."\">".$lang['page.str13']."</a>&nbsp;\n";
    			$this->output.="<a href=\"javascript:goPage('".$pagecount."');\" title=\"".$lang['page.str14']."\">".$lang['page.str15']."</a>\n";
  		}

		$this->output.="&nbsp;&nbsp;".$lang['page.str16']."<input type='text' class=page name=page size=1 maxlength=4 ";
		if ($pagecount==1) $this->output.=" disabled";
		$this->output.=">".$lang['page.str9']."</td>";
		$this->output.="<td width=25 align=right><input type='submit' style='height:17;font-size:9pt' value='GO' name='cndok'";
		if ($pagecount==1) $this->output.=" disabled";
		$this->output.="></td></tr></form></table>\n";
	}
	
	//显示: 页次：2/3 页    分页： [1] [2] [3] 转：页
	function returnpage1($paraArr,$showtop){
		global $lang;
		$p=floor(($this->page-1) / 10);
		$pagecount=ceil($this->total / $this->pagesize);
		
		if ($showtop) $this->returntop();
		$this->output.="<table width=".$this->tablewidth." border=0 cellspacing=0 cellpadding=0 align='".$this->tablealign."' class='".$this->tablecss."'>\n";
		$this->returngoPage();
		$this->output.="<form name=goPageform method=Post>\n";
		
		for ($i=0;$i<count($paraArr);$i++){
			$this->output.="<input type=hidden name=".$paraArr[$i][0]." value=\"".$paraArr[$i][1]."\">\n";	
		}
		
		$this->output.="<tr><td>".$lang['page.str7']."<font color=red>".$this->page."</font>/".$pagecount.$lang['page.str9']." &nbsp;</td>";
		$this->output.="<td align=right>".$lang['page.str8']."\n";
		if ($p*10>0){
			$this->output.="<a href=\"javascript:goPage('".($p)."');\" title=\"".$lang['page.str17'].($p)." ".$lang['page.str9']."\">[<<]</a>   ";
		}
		for ($ii=($p*10+1);$ii<=($p*10+10);$ii++){
			if ($ii<=$pagecount){
			   	if($ii==$this->page){
	        	 		$this->output.="<font color=red>[".$ii."]</font> \n";
				}else{
			      		$this->output.="<a href=\"javascript:goPage('".$ii."');\" title=\"".$lang['page.str17'].$ii.$lang['page.str9']."\"><font color=blue>[".$ii."]</font></a>\n";
			   	}
			}
		}
		if ($ii<=$pagecount){
			$this->output.="<a href=\"javascript:goPage('".$ii."');\" title=\"".$lang['page.str17'].$ii.$lang['page.str9']."\">[>>]</a>   \n";
		}

		$this->output.=$lang['page.str16']."<input type='text' name=page size=1 maxlength=3 ";
		if ($pagecount==1) $this->output.=" disabled";
		$this->output.=">".$lang['page.str9']."</td>";
		$this->output.="<td width=25 align=right><input type='submit' style='height:17;font-size:9pt' value='GO' name='cndok'";
		if ($pagecount==1) $this->output.=" disabled";
		$this->output.="></td></tr></form></table>\n";
	}
	function err($msg){
		echo $msg;
	}
}
class SoPaginationClass{
/*======================================================
类名： SoPaginationClass
功能：分页类，并且提供相邻页的链接（数据无限量），提供数据库和文本两种使用实例
原创作者：西大浪人 （simonlsy@vip.sina.com） 2005-4-8
程序完善：纯粹误会 （http://www.zh5j.com QQ:44922032）2005-4-28
修改:Phzzy (http://www.phzzy.org) 2005-7-20
----------
请尊重作者的劳动，保留如上注释信息
----------
比较另类
=======================================================*/
var $mBegin;//当前分页超始位置
var $mEnd;//当前分页结束位置（不含）
var $mPageCode;//分页链接代码

function SoPaginationClass($total,$per=1,$midNum=10,$nowfont_class="nowpage",$font_class='pagefont')
{
$prepage="prepage";
$nextpage="nextpage";
$font="style=\"font-family:Webdings\"";

GLOBAL $HTTP_GET_VARS,$HTTP_SERVER_VARS, $lang;//兼容PHP4.1以下的服务器

if(!$total)return $this->mPageCode=$lang['page.class.str13'];//为零的总数处理

$page_cnt=ceil($total/$per);//计算页数（取整返回）
$this->mPageCode='';//输出的分页链接初值
@$page=$HTTP_GET_VARS['page'];

if($page < 1) $page=1;
elseif($page>$page_cnt)$page=$page_cnt;
$next_page=$page+1;
$prev_page=$page-1;

/*下面是一个纯粹误会早期所写的复杂语句，功能：让当前页永远距中，并使分页链接数量保持平衡*/
$offset=floor($midNum/2);
$current_page=$page;
if($current_page-$offset<=0)$current_page=$offset+1;
if($current_page+$offset>$page_cnt)$current_page=$page_cnt-$offset;
$begin=($current_page-$offset)>0?$current_page-$offset:1;
$end=($current_page+$offset)<$page_cnt?$current_page+$offset:$page_cnt;
/*复杂语句Over*/

/*获取地址，不说下面中间两条语句多余，那是一个数组型的$_GET的除Bug方案*/
$SELF="http://$_SERVER[HTTP_HOST]$_SERVER[PHP_SELF]?";
@$QUERY=$_SERVER["QUERY_STRING"];
$query_page=preg_replace(array("!((&|^)page=([^&]+))|(page=)!","!(^&)|[&]{2,}|([&]$)!"),array('',''),$QUERY);
$query_per=preg_replace(array("!((&|^)page_per=([^&]+))|(page_per=)!","!(^&)|[&]{2,}|([&]$)!"),array('',''),$QUERY);
$query_page=$SELF.$query_page.($query_page?"&":"");
$query_per=$SELF.$query_per.($query_per?"&":"");
/*获取地址 Over*/

//自定义每页的记录数
if($page_cnt==1)
{
$this->mPageCode.="";
}
else
{
$this->mPageCode.=$page>1
? "\n<a href=\"{$query_page}page=1\"><span $font>9</span></a>\n<a href=\"{$query_page}page=$prev_page\" title=\"{$lang['page.class.str8']}(Back)\"><span $font>7</span></a>"
: "\n<span $font>9</span>&nbsp;<span $font>7</span>";

//中间页
for($i=$begin;$i<=$end;$i++)
{
$this->mPageCode.=$page==$i
? "\n<span class='$nowfont_class'>$i</span>"
: "\n<span><a href=\"{$query_page}page=$i\" class='$font_class'>$i</a></span>";
}

$this->mPageCode.=$page<$page_cnt
? "\n<a href=\"{$query_page}page=$next_page\" title=\"{$lang['page.class.str9']}(Next)\" ><span $font>8</span></a>\n<a href=\"{$query_page}page=$page_cnt\"><span $font>:</span></a>"
: "\n<span $font>8</span>&nbsp;<span $font>:</span>";
}

}
}
/*=================================================
分页涵数 
初固定传递 $page 与 $random 外，
还可额外传递两个参数$para_name与$para_name1 其值分别为$para_value与$para_value1	
=================================================
*/
function page_search($unit,$info,$para_name0,$para_value0,$para_name1,$para_value1,$para_name2,$para_value2,$para_name3,$para_value3,$para_name4,$para_value4){
	global $page,$total,$page_count,$page_size,$random;
	$str="";
	$prev_page=$page-1;
	$next_page=$page+1;
?>
	<table width="100%" border="0" cellspacing="2" cellpadding="0" align="center">
		<form name="search_form" method="post">
		<tr>
			<td colspan="2" align="right">
			每页显示:<?=$page_size." ".$unit?>，共有 <b><?=$total?></b> <?=$unit.$info?>
			</td>
		</tr>
			<input type="hidden" name="random" value="<?=$random?>">
			<!--================额外条件还可以再添加===================-->
			<?
			if ($para_name0!=""){
				$str.="&".$para_name0."=".$para_value0;
			?>
				<input type="hidden" name="<?=$para_name0?>" value="<?=$para_value0?>">
			<?
			}
			if ($para_name1!=""){
				$str.="&".$para_name1."=".$para_value1;
			?>
				<input type="hidden" name="<?=$para_name1?>" value="<?=$para_value1?>">
			<?
			}
			if ($para_name2!=""){
				$str.="&".$para_name2."=".$para_value2;
			?>
				<input type="hidden" name="<?=$para_name2?>" value="<?=$para_value2?>">
			<?
			}
			if ($para_name3!=""){
				$str.="&".$para_name3."=".$para_value3;
			?>
				<input type="hidden" name="<?=$para_name3?>" value="<?=$para_value3?>">
			<?
			}
			if ($para_name4!=""){
				$str.="&".$para_name4."=".$para_value4;
			?>
				<input type="hidden" name="<?=$para_name4?>" value="<?=$para_value4?>">
			<?
			}
			?>
			<tr>
				<td>页次：<font color="red"><?=$page?></font>/<?=$page_count?> 页&nbsp;</td>
				<td align="right">分页：
				<?
				if ($page<=1){
				?>
					首页&nbsp;上一页
				<?
				}
				else{
				?>
					<a class="asp" href="<?=$PATH_INFO?>?page=1<?=$str?>"><font color="red">首页</font></a>&nbsp;
					<a class="asp" href="<?=$PATH_INFO?>?page=<?=$prev_page.$str?>"><font color="red">上一页</font></a>
					<?
				}
					?>
				&nbsp;
				<?
				if ($next_page>$page_count){
				?>
					下一页&nbsp;尾页
				<?
				}
				else{
				?>
					<a class="asp" href="<?=$PATH_INFO?>?page=<?=$next_page.$str?>"><font color="red">下一页</font></a>&nbsp;
					<a class="asp" href="<?=$PATH_INFO?>?page=<?=$page_count.$str?>"><font color="red">尾页</font></a>
				<?
				}
				?>
				&nbsp;&nbsp;转到：
				<input type="text" name="page" size="2">页
				<input type="submit" value="GO!" name="cndok">
			</td>
		</tr>
		</form>
	</table>
<?
	}
?>