// filename: pager.class.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 $db;
$this->_setoptions($option);
// 总条数
if ( !isset($this->numitems) )
{
$res = $db->query($this->sql);
$this->numitems = $res->numrows();
}
// 总页数
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;
}
/***
*
* 返回结果集的数据库连接
* 在结果集比较大的时候可以直接使用这个方法获得数据库连接,然后在类之外遍历,这样开销较小
* 如果结果集不是很大,可以直接使用getpagedata的方式获取二维数组格式的结果
* getpagedata方法也是调用本方法来获取结果的
*
***/
function getdatalink()
{
if ( $this->numitems )
{
global $db;
$pageid = $this->currentpageid;
$from = ($pageid - 1)*$this->pagesize;
$count = $this->pagesize;
$link = $db->limitquery($this->sql, $from, $count); //使用pear db::limitquery方法保证数据库兼容性
return $link;
}
else
{
return false;
}
}
/***
*
* 以二维数组的格式返回结果集
*
***/
function getpagedata()
{
if ( $this->numitems )
{
if ( $res = $this->getdatalink() )
{
if ( $res->numrows() )
{
while ( $row = $res->fetchrow() )
{
$result[] = $row;
}
}
else
{
$result = array();
}
return $result;
}
else
{
return false;
}
}
else
{
return false;
}
}
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;
}
}
?>