814247614 发表于 2017-4-10 06:02:55

记录一个我改装的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$_SERVER";//当页地址栏,含?后的请求项
$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$_SERVER";//当页地址栏,含?后的请求项
$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$_SERVER";//当页地址栏,含?后的请求项
$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;
}
  
}
?>
页: [1]
查看完整版本: 记录一个我改装的php的分页类