$nPageSize = 19;
$nMaxRow = count($arrReportFilterRulePersons);
$nCurrentStartRowIndex = ($nPage - 1) * $nPageSize;
$nRowsFromCurrentPageToLastPage = $nMaxRow - $nCurrentStartRowIndex;
$nMaxPage = ceil($nMaxRow / $nPageSize);
if ($nPage == 1)
{
$nPrevPage = 1;
}
else
{
$nPrevPage = $nPage - 1;
}
if ($nPage == $nMaxPage)
{
$nNextPage = $nNextPage;
}
else
{
$nNextPage = $nPage + 1;
}
$bMoreThanOnePage = false;
$bIsLastPage = false;
if ($nMaxRow > $nPageSize)
{
$bMoreThanOnePage = true;
}
if ($nRowsFromCurrentPageToLastPage <= $nPageSize)
{
$bIsLastPage = true;
}
// Get current page's persons list
if ($bMoreThanOnePage && $bIsLastPage)
{
$arrReportFilterRulePersons = array_slice($arrReportFilterRulePersons,$nCurrentStartRowIndex,$nRowsFromCurrentPageToLastPage);
}
else if ($bMoreThanOnePage && !$bIsLastPage)
{
$arrReportFilterRulePersons = array_slice($arrReportFilterRulePersons,$nCurrentStartRowIndex,$nPageSize);
}
函数:Pagination($total,$per)
功能:分页
参数:$total 总记录数 , $per 每页显示记录数
备注:http://yubeinet.com surfchen
******************************************/
function Pagination($total,$per)
{
$n=$total/$per;
$page_num=ceil($n);
if ($page_num==1)
{
return false;
}
$url=basename($_SERVER['PHP_SELF']);
$query_array=explode("&",$_SERVER['argv'][0]);
foreach ($query_array as $key => $value)
{
if (strstr($value,"page="))
{
unset($query_array[$key]);
}
}
$query_string=implode("&",$query_array);
for ($page=1;$page<=$page_num;$page++)
{
echo "<a href=\"{$url}?{$query_string}&page={$page}\">$page</a> ";
}
echo "<br />";
}
include_once"DB.php";
class listPage {
var $_table; //表名
var $_maxLine; //每页显示行数
var $_db;
var $_offset; //记录偏移量
var $total = 0; //记录总数
var $number; //本页读取的记录数
var $result; //读出的结果 var $totalPgs; //总页数
var $currentPgs; //当前页数
var $condition; //显示条件 如:where id='$id' order by id desc
var $pageQuery; //分页显示要传递的参数 var $pageLink1;//分页显示链接
var $pageLink2;//分页显示链接 //******构造函数*************
//参数:表名、最大行数、偏移量、db对象
//分页参考字段请用一个自动编号字段
function ListPage($tableName,$PgNum,$off=0,$db){
$this->_table=$tableName;
$this->_maxLine=$PgNum;
$this->_offset=$off;
$this->_db=$db;
$this->condition=" ";
$this->_db->setFetchMode(DB_FETCHMODE_ASSOC);
}
//********设置显示条件*********
//如:where id='$id' order by id desc
//要求是字串string,符合SQL语法(本字串将加在SQL语句后)
function setCondition($s){
$this->condition = $s;
return true;
} //******设置传递参数************
// key参数名 value参数值
// 如:setpagequery("id",$id);如有多个参数要传递,可多次调用本函数。
function setPageQuery($key,$value){
$tmp['k']=$key; $tmp['value']=$value;
$this->pageQuery[]= $tmp;
//printr($this->pageQuery);
} //********读取记录***************
// 主要工作函数,根据所给的条件从表中读取相应的记录
// 返回值是一个二维数组,Result[记录号][字段名]
function readList() {
$SQL = "select * from ".$this->_table." ".$this->condition;
$result = $this->_db->query($SQL);
$this->total = $result->numRows();//计算总记录数
if($this->total>0) { //根据条件 Condition //起始
$SQL="SELECT * FROM ".$this->_table." ".$this->condition;
//if(($this->_offset * $this->_maxLine) > $this->total ) $this->_offset = 0;
$result = $this->_db->limitQuery($SQL,$this->_offset,$this->_maxLine);
$k=0;
$rows = array();
while($rows = $result->fetchRow()){
$this->result[] = $rows;
$k++;
}
$this->number=$k;
}
return $this->result;
} //**********显示页数*************
//显示当前页及总页数
function setPgs() {
$this->totalPgs = ceil($this->total / $this->_maxLine);
$this->currentPgs = ceil($this->_offset / $this->_maxLine)+1;
} //**********显示翻页按钮*************
//此函数要在ThePage()函数之后调用!!!
//显示首页、下页、上页、未页,并加上要传递的参数
function setPage() {
$this->setPgs();
$first=1;
$next=$this->currentPgs+1;
$prev=$this->currentPgs-1;
$last=$this->totalPgs;
$k=count($this->pageQuery);
$strQuery=""; //生成一个要传递参数字串
for($i=0;$i < $k;$i++){
$strQuery.="&".$this->pageQuery[$i]['k']."=".$this->pageQuery[$i]['value'];
} $this->pageLink1 = "";
if($this->currentPgs>1 && $this->currentPgs < $this->totalPgs){
$this->pageLink1 .="| <a href=".$_SERVER['PHP_SELF']."?currentpage=".$first.$strQuery.">首页</A> ";
$this->pageLink1 .= "<a href=".$_SERVER['PHP_SELF']."?currentpage=".$prev.$strQuery.">上一页 </a> ";
$this->pageLink1 .= "| <A href=".$_SERVER['PHP_SELF']."?currentpage=".$next.$strQuery.">下一页</A> ";
$this->pageLink1 .= "<A href=".$_SERVER['PHP_SELF']."?currentpage=".$last.$strQuery.">末页</A> |";
}
else if($this->currentPgs==1 && $this->currentPgs < $this->totalPgs) {
$this->pageLink1 .="| 首页 上一页 | ";
$this->pageLink1 .="<A href=".$_SERVER['PHP_SELF']."?currentpage=".$next.$strQuery.">下一页</A> ";
$this->pageLink1 .="<A href=".$_SERVER['PHP_SELF']."?currentpage=".$last.$strQuery.">末页</A> |";
}
else if($this->currentPgs==$this->totalPgs && $this->totalPgs>1) {
$this->pageLink1 .="| <A href=".$_SERVER['PHP_SELF']."?currentpage=".$first.$strQuery.">首页</A> ";
$this->pageLink1 .="<a href=".$_SERVER['PHP_SELF']."?currentpage=".$prev.$strQuery.">上一页 </a> ";
$this->pageLink1 .="| 下一页 末页 |";
} for($i=1;$i<=$this->totalPgs;$i++)
{
$this->pageLink2 .= "<a href=".$_SERVER['PHP_SELF']."?currentpage=".$i.$strQuery.">".$i."</a> ";
} }
}
//******end class --------------
?>
#初始化翻页变量
function initpage(){
#初始化$this->page为数组,存储方式为
#page[0]=当前是第几页
#page[1]=每页显示几条数据
#page[2]=总共有多少条数据
#page[3]=从哪条数据开始读取
#page[4]=总共有多少页
#数据分页方法:
#select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize
#初始化
$pg=$_GET['page'];
#取得页数
$this->page[0]=(isset($pg)?intval($pg):1);
#每页显示几条数据,默认显示20条每页
$this->page[1]=(DEFINED("DEF_PAGE_SIZE")?DEF_PAGE_SIZE:20);
#总共有多少条数据
$this->execute($this->sql);
$this->page[2]=$this->rs->RecordCount();
#设置开始读取数据ID
$this->page[3]=(($this->page[0]-1)*$this->page[1]);
#总共页数
if($this->page[2]){
#总数据量小于$PageSize,只有一页
if( $this->page[2]<$this->page[1]){$this->page[4]= 1;}
#取总数据量除以每页数的余数
if( $this->page[2]%$this->page[1]){
#如果有余数,则页数等于总数据量除以每页数的结果取整再加一
$this->page[4]= (int)($this->page[2]/$this->page[1]) + 1;
#如果没有余数,则页数等于总数据量除以每页数的结果
}else{
$this->page[4] = $this->page[2] / $this->page[1];
}
}
#没有数据的时候置0
else{
$this->page[4] = 0;
}
unset($pg);unset($sql);
}
#翻页初始化结束#显示翻页条
function showpage(){
$url=$_SERVER['PHP_SELF'];
$str.="<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" class=\"txt\"> \n\t";
$str.="<tr> \n\t";
$str.="<td> 数据:".$this->page[2]."条 每页:";
$str.=$this->page[1]."条 第:".$this->page[0]."/".$this->page[4]."页</td> \n\t";
$str.="<td align=\"right\" class=\"txt\">\n\t";
$str.="<a href=".$url."?act=list&page=1><span class=\"txt\">首页</span></a>\n\t";
if(1<$this->page[0]){
$str.="<a href=".$url."?act=list&page=".($this->page[0]-1)."><span class=\"txt\">上一页</span></a>\n\t";
}else{$str.="上一页 ";}
if($this->page[0]<$this->page[4]){
$str.="<a href=".$url."?act=list&page=".($this->page[0]+1)."><span class=\"txt\">下一页</span></a>\n\t";
}else{$str.="下一页 \n\t";}
$str.="<a href=".$ulr."?act=list&page=".$this->page[4]."><span class=\"txt\">尾页</span></a> 转到第 ";
$str.="<select name=\"select\" class=\"bg2\" \n\t";
$str.="onchange=javascript:location=\"".$url."?act=list&page=\"+";
$str.="this.options[this.selectedIndex].value> \n\t";
for($i=1;$i<=$this->page[4];$i++){
if($this->page[0]==$i){
$str.="<option value=\"$i\" selected>".$i."</option> \n\t";
}else{$str.="<option value=\"$i\">".$i."</option> \n\t";}
}
$str.="</select> \n\t";
$str.="页</td> \n\t";
$str.="</tr> \n\t";
$str.="</table>\n\t";
unset($url);unset($i);
return $str;
}
#显示翻页条结束#这是在一个主类当中的两个小函数
#使用方法:$xfoa = new application();
$xfoa->set_sql("select id,title,content form news order by id desc");
$xfoa->initpate();
#后面是数据显示操作
$records=$xfoa->execute();#此函数执行先前保存sql语句($xfoa->set_sql()), 并返回句柄
if(!$records){
#....
;
}else{
#....
;
#显示分页条
$xfoa->showpage();
}
#清理
$xfoa->nothing();
unset($xfoa);