php 分页类 扩展代码
2018-09-21 11:36
原来发表过一个脱离数据库的分页类,最近使用的时候发现有些时候搜索的东西过于大的时候,采用url传递参数的方式,可能会有一定的影响或者叫已知的bug,这次做了一些扩展,同时兼容了以前的模式,使用上面很简单的,只需要多设置一个参数就可以了代码如下:
复制代码 代码如下:
<?php
/**
* 功能: 分页类,根据提供的数据总量和页面大小
* 创建日期:Fri Apr 20 16:45:21 CST 2007
* 最后更新:
* 作者gt;
*/
class pagination
{
var $result = array();
var $pVar = myp;//page参数分页记数
var $urlParamStr = ; //页面的所有参数
var $sqlMoveNumber = 0; //数据的偏移量
var $is_post = false;
public function pagination()
{
}
public function set($sum,$pageSize,$page=,$is_post = false)
{
$this->is_post = $is_post;
$this->pVar = defined(PAGE_BAR) ? PAGE_BAR : myp ;
$url = $_SERVER[PHP_SELF].?.$_SERVER[QUERY_STRING];
//计算出总页数
$curPage = $this->getCurPage();
$temp[sumPage] = ceil($sum/$pageSize);
//修改了,页码超出的bug
if($curPage>$temp[sumPage]) $curPage=$temp[sumPage];
$temp[curPage] = $curPage;
$temp[nextPage] = $temp[sumPage] > $curPage ? ($curPage+1) : $temp[sumPage];
$temp[upPage] = $curPage >1 ? $curPage-1 :1;
$temp[endPage] = $temp[sumPage];
$this->urlParamStr = $this->_makeUrl($url);
$temp[urlPageStr] = ($page==) ? $this->_makeUrl($url) : $page.$this->urlParamStr;
$this->sqlMoveNumber = $curPage <2 ? 0 : ($curPage-1)*$pageSize;
$temp[sqlMoveNumber] = $this->sqlMoveNumber;
$temp[rowNo] = $sum;
$this->result = $temp;
return $this->result;
//print_r($temp);exit();
}
public function getSqlMove()
{
return $this->sqlMoveNumber;
}
public function getFooter()
{
$str= 共有 <FONT COLOR=#FF0033>{$this->result[rowNo]}</FONT> 条 <a href={$this->result[urlPageStr]}{$this->result[upPage]};
if($this->is_post) $str .= onclick=return sanshi_page_post(this.href,{$this->result[upPage]}); ;
$str .= >上一页</a> ;
$str .= 当前 {$this->result[curPage]} 页;
$str .= 共有 {$this->result[sumPage]} 页;
$str .= <a href={$this->result[urlPageStr]}{$this->result[nextPage]};
if($this->is_post) $str .= onclick=return sanshi_page_post(this.href,{$this->result[nextPage]}); ;
$str .= >下一页</a>;
return $str;
}
public function getJumpPage()
{
if($this->is_post)
{
$str = 跳到第 <select name=topage size=1 onchange=sanshi_page_post(\{$this->result[urlPageStr]}\+this.value,this.value)>\n;
}else{
$str = 跳到第 <select name=topage size=1 onchange=window.location=\{$this->result[urlPageStr]}\+this.value>\n;
}
for($i=1;$i<=$this->result[sumPage];$i++)
{
$str .= ($i==$this->result[curPage]) ? <option value=$i selected>$i</option>\n : <option value=$i>$i</option>\n;
}
$str.=</select> 页;
//输出form表单
if($this->is_post)
{
$str .=<script type=text/javascript><!--
function sanshi_page_post(jump_link,page_no)
{
document.getElementById(sanshi_goPage).action = jump_link; document.getElementById({$this->pVar}).value = page_no;
document.getElementById(sanshi_goPage).submit();
return false;
}
// --></script>;
$str .=<form name=sanshi_goPage id=sanshi_goPage method=post>;
$str .=<input type=\hidden\ name={$this->pVar} id={$this->pVar} value=0>;
$_POST = isset($_POST) ? $_POST : array();
foreach($_POST AS $k=>$v)
{
$str .=<input type=\hidden\ name=\{$k}\ id=\{$k}\ value=\{$v}\>;
}
$str .=</form>;
}
return $str;
}
public function getCurPage()
{
return isset($_GET[$this->pVar]) ? intval($_GET[$this->pVar]) : 1 ;
}
//分析出url的参数返回?后的参数,页码为空 包括问号
private function _makeUrl($url)
{
$arrayUrl=parse_url($url);
if(isset($arrayUrl[query]))
{
$q=$arrayUrl[query];
parse_str($q,$qParam);
//print_r($qParam);
if(array_key_exists($this->pVar,$qParam))
{
foreach ($qParam AS $k=>$v)
{
if($k !=$this->pVar) $temp[$k] = $v;
}
$temp[$this->pVar] = ;
if(function_exists(http_build_query))
return ?.http_build_query($temp);
else
return ?.sanshi_http_build_query($temp);
}else {
return ?{$q}&{$this->pVar}=;
}
}else{
return ?{$this->pVar}=;
}
}
}
function sanshi_http_build_query($a,$b=,$c=0)
{
if (!is_array($a)) return false;
foreach ((array)$a as $k=>$v)
{
if ($c)
$k=$b.[.$k.];
elseif (is_int($k))
$k=$b.$k;
if (is_array($v)is_object($v))
{
$r[]=http_build_query($v,$k,1);
continue;
}
$r[]=$k.=.urlencode($v);
}
return implode(&,$r);
}
/*
//print_r($_SERVER);
$p = new pagination();
$p->set(10,2,thi.php);
echo $p->getFooter();
echo $p->getJumpPage();
*/
?>
下一篇:PHP学习一(基础)第12页