原文來自超越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;
}
}
?>