记录一个我改装的php的分页类

原文来自超越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 .= '&nbsp;';
$ret .= '当前为' . $this->CurrentPageID . '页';
$ret .= '&nbsp;';
$ret .= '共' . $this->numItems .'条数据';
return $ret;
}

//获取一般情况下的分页显示
function str_show_GetPageNav($strDetailUrl=''){
$ret = '';
$ret .= $this->str_show_getFPage($strDetailUrl);
$ret .= '&nbsp;';
$ret .= $this->str_show_getpPage($strDetailUrl);
$ret .= '&nbsp;';
$ret .= $this->str_show_getnPage($strDetailUrl);
$ret .= '&nbsp;';
$ret .= $this->str_show_getLPage($strDetailUrl);
$ret .= '&nbsp;';
$ret .= $this->str_show_getPageInfo();
return $ret;
}


}
?>

你可能感兴趣的:(数据结构,sql,PHP,mysql,SQL Server)