<?php
class getPageData {
var $appConfig ; //应用程序配制数据
var $db ; //数据库连接对象
var $_pageSize = 20 ; //一页记录数(大小)
var $_currentPage = 1 ; //当前页码
var $_rowCount = 0 ; //记录总数
var $_pageCount = 0 ; //总页数
var $_records ; //当前页记录
var $_row=array() ; //当前的记录数据
var $_currentPageSize ; //当前页记录总数
var $_currentPageStartNo ; //当前页开始记录号
var $_linkClass; //css的文件
var $_option ; //处理后的导航条用的数据
var $StrErr = "" ; //存放出错误的字符串
var $_beforeGetCurrentData=array('eventName'=>'_beforeGetCurrentData','eventType'=>'eventCode','eventCode'=>'') ;//得到当前数据前的事件,即可对$this->_row进行处理
var $_afterGetCurrentData=array('eventName'=>'_afterGetCurrentData','eventType'=>'eventCode','eventCode'=>'') ;//得到当前数据后的事件,即可对$this->_records[$this->_currentPageSize]进行处理
var $_afterGetData=array('eventName'=>'_afterGetData','eventType'=>'eventCode','eventCode'=>'') ;//得到数据后的事件,即可对$this->_records进行处理
/**
* 功能:类的构造函数
*
* @param $pageSize - 每一页的记录数,默认为取全部数据
*/
function getPageData($pageSize = false)
{
global $db, $appConfig ,$eventStrCode ;
$this->eventStrCode = $eventStrCode ;
$this->appConfig = $appConfig ;
$this->db = $db ;
if ($pageSize>0) {
$this->_pageSize = $pageSize ;
} else {
$this->_pageSize = $this->appConfig['pageSize'] ;
}
} //end function getPageData
function reset()
{
$this->_records =array();
}
function set_event_code($event_name, $event_code)
{
$event =$this->$event_name ;
$event['eventCode'] =$event_code ;
$this->$event_name =$event ;
}
function set_event_function($event_name, $event_function)
{
$event =$this->$event_name ;
$event['eventFunction'] =$event_function ;
$event['eventType'] = 'eventFunction';
$this->$event_name =$event ;
}
function autoCommit($onoff=false)
{
$this->db->autocommit = $onoff ? true : false;
return DB_OK;
}//end function autoCommit
function commit()
{
$this->db->commit();
}//end function commit
function rollback()
{
$this->db->rollback();
}
/**
* 功能:获取经解析后的SQL语句,能直接被运行
* 出错返回假,设置errPage为出错页面代码,否则返回经解析后的sql语句
*
* @param $sql - sql语句模板
* @param $data - 要替换的数据
* @return string
*/
function getPrepareSQL($sql, $data = false)
{
// $db = $this->db ;
// global $error ;
$sth = $this->db->prepare($sql) ;
$realquery = $this->db->executeEmulateQuery($sth, $data);
if ($this->db->isError($realquery)) {
$errData = $sql ;
// $this->errPage = $error->getErrorPage("preparesqlerr", $errData);
return false ;
}
// $this->sql = $realquery ;
return $realquery;
} //end function getPrepareSQL
/**
* 运行操作查询
*
* @param $sql - 运行sql操作语句
* @return boolean
*/
function execute($sql, $pageSize=false)
{
// $db = $this->db ;
// global $error ;
//echo $this->db->autocommit.'**********' ;
if (is_array($sql) == true) { // 如果sql是数组语句
//$this->autoCommit(false);
foreach ($sql as $val) {
$result = $this->db->simpleQuery($val);
if ($this->db->isError($result)) {
$this->rollback();
$errData = $val ;
//echo $val;
// 显示出错信息
// $this->errPage = $error->getErrorPage("runsqlerr", $errData);
return false ;
}
}
if(true==$this->db->autocommit) $this->commit() ;
return true ;
}
// 如果不是数组,则会执行下面的代码
$result = $this->db->simpleQuery($sql);
if ($this->db->isError($result)) {
// $this->db->rollback();
$errData = $sql ;
// $this->errPage = $error->getErrorPage("runsqlerr", $errData);
$this->rollback();
return false ;
} else {
if(true==$this->db->autocommit) $this->commit() ;
return true ;
}
} //end function execute
/**
* 查询一个记录是否存在于Table中,StrSQLWhere为查询的条件
* 输出:
* 返回值记录总数,如果不存在,则返回假值(false)
*/
function isRecordInTable ($table, $field, $val)
{
// $db = $this->db ;
$sql = "select * from $table " ;
$sql .= " where $field='" . $val . "'" ;
$res = $this->db->query($sql);
if ($this->db->isError($res)) {
return false ;
}
$rows = $res->numRows();
if ($rows <= 0) {
return false;
} else {
return $rows;
}
} //End function RecordIsInTable ($Table, $StrSQLWhere)
/**
* 判断是否有下一页
*/
function hasNextPage()
{
return $this->_currentPage < $this->_pageCount;
}
/**
* 取得下一页页码
*/
function getNextPageNo()
{
return $this->_currentPage + 1;
}
/**
* 判断是否有上一页
*/
function hasPriorPage()
{
if ($this->_pageCount > 0) {
return $this->_currentPage > 1;
} else {
return false;
}
}
/**
* 取得上一页页码
*/
function getPriorPageNo()
{
return $this->_currentPage - 1;
}
/**
* 判断是否第一页
*/
function isFirstPage()
{
return $this->_currentPage == 1 || $this->_pageCount == 0;
}
/**
* 判断是否最后一页
*/
function isLastPage()
{
return $this->_currentPage == $this->_pageCount || $this->_pageCount == 0;
}
/**
* 装载某一页数据,成功则返回true,失败则返回false
*
* 有一个参数为当前记录所有字段的值(一个以字段名为索引的数组)
*/
function query($sql, $_pageSize = 0,$ispage=true)
{
$this->reset();
// global $HTTP_GET_VARS;
// 页大小和当前页码必须>=1
$this->_currentPage = max((int)@$_GET['pageID'], 1);
//如果不需要分页
if($ispage=false) $this->_currentPage=1 ;
$this->_perPage = 2;
if ($_pageSize >0) {
$this->_pageSize = $_pageSize;
} else {
$_pageSize = $this->_pageSize;
}
// 解析SQL语句
$res = $this->db->query($sql);
if ($this->db->isError($res))
{
$this->_records = array() ;
$this->_rowCount = 0;
$this->_pageCount = 0;
return false;
}
// 计算出记录总数和页总数
$this->_rowCount = $res->numRows() ;
// print_r($res->numRows()) ;// ."test<br>" ;
$this->_itemData = range(1, $this->_rowCount);
/*
echo $this->_rowCount;
echo "===<br>---";
echo $this->_pageSize;
*/
$this->_pageCount = ceil($this->_rowCount / $this->_pageSize);
if ($this->_currentPage > $this->_pageCount) {
$this->_currentPage = $this->_pageCount;
}
if ($this->_rowCount == 0) {
$this->_currentPage = 0;
return false ;
}
$this->_records = array();
// 将光标移动到指定页的第一条记录前
$this->_currentPageStartNo = ($this->_currentPage - 1) * $this->_pageSize + 1;
$firstRowNo = $this->_currentPageStartNo;
while (--$firstRowNo > 0 && $res->fetchRow()) // $this->_rowCount++;
// 取出指定页的数据
$read = 0;
$this->_currentPageSize = 0;
while ($read < $this->_pageSize && $this->_row = $res->fetchRow()) {
$this->_currentPageSize++ ;
/*
开始 _beforeGetCurrentData事件
得到当前数据前的事件,即可对$row进行处理
*/
extract($this->_beforeGetCurrentData,EXTR_REFS) ;
switch ($eventType) {
case 'eventCode':
if(true==$eventCode)
{
@eval($eventCode);
}
break ;
case 'eventFunction':
// print "i equals 1";
$eventFunction($this);
break;
case 'eventMethod ':
//print "i equals 2";
break;
}
//结束 _beforeGetCurrentData事件
//runEvent($this->_beforeGetCurrentData,$this);
$this->_records[$this->_currentPageSize] = $this->_row;
/*
开始 _afterGetCurrentData事件
得到当前数据后的事件,即可对$this->_records[$this->_currentPageSize]进行处理
*/
extract($this->_afterGetCurrentData,EXTR_REFS) ;
switch ($eventType) {
case 'eventCode':
if(true==$eventCode)
{
@eval($eventCode);
}
break ;
case 'eventFunction':
// print "i equals 1";
$eventFunction($this);
break;
case 'eventMethod ':
//print "i equals 2";
break;
}
//结束_afterGetCurrentData事件
//runEvent($this->_afterGetCurrentData,$this);
//require'event.php' ;
// $this->_rowCount++;
$read++;
}
/*
开始 _afterGetData事件
得到数据后的事件,即可对$this->_records进行处理
*/
//runEvent($this->_afterGetData,$this);
extract($this->_afterGetData,EXTR_REFS) ;
switch ($eventType) {
case 'eventCode':
if(true==$eventCode)
{
@eval($eventCode);
}
break ;
case 'eventFunction':
// print "i equals 1";
break;
case 'eventMethod ':
//print "i equals 2";
break;
}
//结束 _afterGetData事件
// 释放资源
return true;
}
/**
* 得到页面导航条的HTML代码
*
* @return string
* @roseuid 3CFA0B7A0151
*/
function getPageNav()
{
$this->getLinks() ;
extract($this->_option) ;
//$nav = "共$pageCount*页 $rowCount*条记录 *每页$pageSize*条 当前第$currentPage".$this->_getListLinkUrl() ."*页 $first $back $next $last" ;
$nav = "共$pageCount*页 $rowCount*条记录 *每页$pageSize*条 当前第".$this->_getListLinkUrl() ."*页 $first $back $next $last" ;
$nav = str_replace("*", "", $nav);
return $nav ;
} //end function getPageNav
/**
* Returns the correct link for the back/pages/next links
*
* @return string Url
*/
function _getLinksUrl()
{
// global $HTTP_SERVER_VARS;
// Sort out query string to prevent messy urls
$querystring = array();
$qs = array();
if (!empty($_SERVER['QUERY_STRING'])) {
$qs = explode('&', $_SERVER['QUERY_STRING']);
for ($i = 0, $cnt = count($qs); $i < $cnt; $i++) {
list($name, $value) = explode('=', $qs[$i]);
if ($name != 'pageID') {
$qs[$name] = $value;
}
unset($qs[$i]);
}
}
foreach ($qs as $name => $value) {
$querystring[] = $name . '=' . $value;
}
return $_SERVER['SCRIPT_NAME'] . '?' . implode('&', $querystring) . (!empty($querystring) ? '&' : '') . 'pageID=';
}
function _getListLinkUrl()
{
$nav = '
<select onchange="location.href=\''.$this->_getLinksUrl().'\'+this.value;">
<script language="JavaScript">
<!--
for(i=1; i<='.$this->_pageCount.'; i++) {
document.write("<option value="+i+(i=='.$this->_currentPage.'? " selected":"")+">"+i+"</option>");
}
//-->
</script>
</select>';
return $nav;
}
/**
* Returns back link
*
* @param $url URL to use in the link
* @param $link HTML to use as the link
* @return string The link
*/
function _getBackLink($url, $link = '<<')
{
// Back link
if ($this->hasPriorPage()) {
$back = sprintf('<a href="%s%d" %s>%s</a>',
$url,
$this->_currentPage - 1,
!empty($this->_linkClass) ? 'class="' . $this->_linkClass . '"' : '',
$link);
} else {
// $back = ' ';
$back = '上页';
}
return $back;
}
/**
* Returns first link
*
* @param $url URL to use in the link
* @param $link HTML to use as the link
* @return string The link
*/
function _getFirtLink($url, $link = '|<<')
{
if ($this->isFirstPage()) {
//$first = " ";
$first = "首页";
} else {
$first = sprintf('<a href="%s%d" %s>%s</a>',
$url,
1,
!empty($this->_linkClass) ? 'class="' . $this->_linkClass . '"' : '',
$link);
}
return $first;
}
/**
* Returns last link
*
* @param $url URL to use in the link
* @param $link HTML to use as the link
* @return string The link
*/
function _getLastLink($url, $link = '>>|')
{
if ($this->isLastPage()) {
//$last = " ";
$last = "尾页";
} else {
$last = sprintf('<a href="%s%d" %s>%s</a>',
$url,
$this->_pageCount,
!empty($this->_linkClass) ? 'class="' . $this->_linkClass . '"' : '',
$link);
}
return $last;
}
/**
* Returns next link
*
* @param $url URL to use in the link
* @param $link HTML to use as the link
* @return string The link
*/
function _getNextLink($url, $link = '>>')
{
if ($this->hasNextPage()) {
$next = sprintf('<a href="%s%d" %s>%s</a>',
$url,
$this->_currentPage + 1,
!empty($this->_linkClass) ? 'class="' . $this->_linkClass . '"' : '',
$link);
} else {
//$next = ' ';
$next = '下页';
}
return $next;
}
/**
* Returns first/back/next/last and page links
*
* @param $first_html HTML to put inside the first link
* @param $back_html HTML to put inside the back link
* @param $next_html HTML to put inside the next link
* @param $last_html HTML to put inside the last link
* @return array Back/pages/next links
*/
function getLinks($first_html = '首页', $back_html = '上页', $next_html = '下页', $last_html = '尾页')
{
$url = $this->_getLinksUrl();
$first = $this->_getFirtLink($url, $first_html);
$back = $this->_getBackLink($url, $back_html);
// $pages = $this->_getPageLinks($url);
$next = $this->_getNextLink($url, $next_html);
$last = $this->_getLastLink($url, $last_html);
$this->_option = array('url' => $url, 'pageCount' => $this->_pageCount, 'pageSize' => $this->_pageSize,
'currentPage' => $this->_currentPage, 'rowCount' => $this->_rowCount,
$pages, $next, $last, 'first' => $first, 'back' => $back,
'pages' => $pages, 'next' => $next, 'last' => $last);
return $this->_option ;
}
/**
*
* @return array pagerecords
*/
function getData()
{
if(0==count($this->_records)){
return false ;
}else{
return $this->_records ;
}
}
}
?>
发表于 @ 2004年08月27日 19:29:00 | 评论( loading... ) | 举报| 收藏