原文来自超越php
特点:
1.包含显示函数
2.没有调用其他任何库,但是需要连接参数的全局变量,具体就是2个地方有调用
3.page参数错误会跳到index.php
4.显示函数的输出格式还不支持模版,只是最简单的输出
5.还有很多可以改进的地方,以后改好再做记录
=======
使用举例:
$pageSize=20;
$pageOption = array(
"sql"=>$art->GetArticleBycateSql($cate),
"PageSize"=>$pageSize,
//"CurrentPageID"=>$currentPageId
);
$page = new Pager($pageOption);
$ret = $page->getDataLink();
$cateNews = array();
while($row=mysql_fetch_array($ret,MYSQL_ASSOC)){
$cateNews[]=$row;
}
=======================
类原文
======================
<?php
// 分页类,这个类仅仅用于处理数据结构,不负责处理显示的工作
Class Pager
{
var $PageSize; //每页的数量
var $CurrentPageID; //当前的页数
var $NextPageID; //下一页
var $PreviousPageID; //上一页
var $numPages; //总页数
var $numItems; //总记录数
var $isFirstPage; //是否第一页
var $isLastPage; //是否最后一页
var $sql; //sql查询语句
function Pager($option)
{
global $DBHOST,$DBUSER,$DBPWD,$DBNAME;
$this->_setOptions($option);
//当前页数
$this->CurrentPageID=$this->int_getCurrentPage('');
if($this->CurrentPageID==-1)
header('Location:index.php');
// 总条数
if ( !isset($this->numItems) )
{
$conn=mysql_connect($DBHOST,$DBUSER,$DBPWD);
mysql_query("set names 'utf8'",$conn);
$res= mysql_query($this->sql,$conn);
$this->numItems = mysql_num_rows($res);
}
// 总页数
if ( $this->numItems > 0 )
{
if ( $this->numItems < $this->PageSize ){ $this->numPages = 1; }
if ( $this->numItems % $this->PageSize )
{
$this->numPages= (int)($this->numItems / $this->PageSize) + 1;
}
else
{
$this->numPages = $this->numItems / $this->PageSize;
}
}
else
{
$this->numPages = 0;
}
switch ( $this->CurrentPageID )
{
case $this->numPages == 1:
$this->isFirstPage = true;
$this->isLastPage = true;
break;
case 1:
$this->isFirstPage = true;
$this->isLastPage = false;
break;
case $this->numPages:
$this->isFirstPage = false;
$this->isLastPage = true;
break;
default:
$this->isFirstPage = false;
$this->isLastPage = false;
}
if ( $this->numPages > 1 )
{
if ( !$this->isLastPage ) { $this->NextPageID = $this->CurrentPageID + 1; }
if ( !$this->isFirstPage ) { $this->PreviousPageID = $this->CurrentPageID - 1; }
}
return true;
}
function _setOptions($option)
{
$allow_options = array(
'PageSize',
// 'CurrentPageID',
'sql',
'numItems'
);
foreach ( $option as $key => $value )
{
if ( in_array($key, $allow_options) && ($value != null) )
{
$this->$key = $value;
}
}
return true;
}
//获取当前页是第几页,如果参数不合法,返回-1
function int_getCurrentPage($strDetailUrl=''){
if($strDetailUrl==''){
$strDetailUrl='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];//当页地址栏,含?后的请求项
}
$currentPageId=1;
if(isset($_REQUEST['page'])){
$currentPageId=$_REQUEST['page'];
$currentPageId=trim($currentPageId);
if(!preg_match('/^\d*$/',$currentPageId)){
return -1;}
else
return $currentPageId;
}
return 1;
}
/***
*
* 返回结果集的数据库连接
* 在结果集比较大的时候可以直接使用这个方法获得数据库连接,然后在类之外遍历,这样开销较小
* 如果结果集不是很大,可以直接使用getPageData的方式获取二维数组格式的结果
* getPageData方法也是调用本方法来获取结果的
*
***/
function getDataLink()
{
if ( $this->numItems )
{
global $DBHOST,$DBUSER,$DBPWD,$DBNAME;
$PageID = $this->CurrentPageID;
$from = ($PageID - 1)*$this->PageSize;
$count = $this->PageSize;
$conn=mysql_connect($DBHOST,$DBUSER,$DBPWD);
mysql_query("set names 'utf8'",$conn);
$limitSql = $this->sql . " Limit ".$from ." , ".$count;
//echo $limitSql;
$link= mysql_query($limitSql,$conn);
return $link;
}
else
{
return false;
}
}
/***
*
* 以二维数组的格式返回结果集
*
***/
function getPageData()
{
if ( $this->numItems )
{
if ( $res = $this->getDataLink() )
{
if ( $res->numRows() )
{
while ( $row = mysql_fetch_array($res,MYSQL_ASSOC) )
{
$result[] = $row;
}
}
else
{
$result = array();
}
return $result;
}
else
{
return false;
}
}
else
{
return false;
}
}
//帮url换新的页
function strSsetUrlNewPage($strUrl,$intNewPage){
$param1 = '/\&page=\d*/i';
$param2='/\?page=\d*/i';
$strUrl = preg_replace($param1,'',$strUrl,1);
$strUrl = preg_replace($param2,'',$strUrl,1);
$det = '?';
if(strpos($strUrl,'?'))
$det='&';
return $strUrl . $det . 'page=' . $intNewPage;
}
//上一页
function str_show_getpPage($strDetailUrl=''){
if($strDetailUrl=='')
$strDetailUrl='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];//当页地址栏,含?后的请求项
//echo $strDetailUrl;
$ret = "";
//上一页
$pPage='上一页';
if(!$this->isFirstPage){
$newUrl = $this->strSsetUrlNewPage($strDetailUrl,$this->PreviousPageID);
$ret .= '<a href='. $newUrl;
$ret .='>'.$pPage.'</a>';
}else{
$ret .= $pPage;
}
return $ret;
}
//下一页
function str_show_getnPage($strDetailUrl=''){
if($strDetailUrl=='')
$strDetailUrl="http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";//当页地址栏,含?后的请求项
$ret = "";
$pPage='下一页';
if($this->isLastPage==false){
$newUrl = $this->strSsetUrlNewPage($strDetailUrl,$this->NextPageID);
$ret .= '<a href='. $newUrl;
$ret .='>'.$pPage.'</a>';
}else{
$ret .= $pPage;
}
return $ret;
}
//最后一页
function str_show_getLPage($strDetailUrl=''){
if($strDetailUrl=='')
$strDetailUrl="http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";//当页地址栏,含?后的请求项
$ret = "";
$pPage='最后一页';
if($this->isLastPage){
$ret .= $pPage;}
else{
$newUrl = $this->strSsetUrlNewPage($strDetailUrl,$this->numPages);
$ret .= '<a href='. $newUrl;
$ret .='>'.$pPage.'</a>';
}
return $ret;
}
//第一页
function str_show_getFPage($strDetailUrl=''){
if($strDetailUrl=='')
$strDetailUrl="http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";//当页地址栏,含?后的请求项
$ret = "";
$pPage='第一页';
if($this->isFirstPage)
$ret .= $pPage;
else{
$newUrl =$this->strSsetUrlNewPage($strDetailUrl,1);
$ret .= '<a href='. $newUrl;
$ret .='>'.$pPage.'</a>';
}
return $ret;
}
//分页信息
function str_show_getPageInfo(){
$ret = "";
$ret .= "共" . $this->numPages . '页';
$ret .= ' ';
$ret .= '当前为' . $this->CurrentPageID . '页';
$ret .= ' ';
$ret .= '共' . $this->numItems .'条数据';
return $ret;
}
//获取一般情况下的分页显示
function str_show_GetPageNav($strDetailUrl=''){
$ret = '';
$ret .= $this->str_show_getFPage($strDetailUrl);
$ret .= ' ';
$ret .= $this->str_show_getpPage($strDetailUrl);
$ret .= ' ';
$ret .= $this->str_show_getnPage($strDetailUrl);
$ret .= ' ';
$ret .= $this->str_show_getLPage($strDetailUrl);
$ret .= ' ';
$ret .= $this->str_show_getPageInfo();
return $ret;
}
}
?>