卖竹竿的小贩

九天遨游任风吹,繁华抛却振翼归. 神鸟自有凌云志,不遇狂风不高飞.

原创  分页。。。算是心得吧。 收藏

<?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 = '&nbsp;';
   $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 = "&nbsp;";
   $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 = "&nbsp;";
   $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 = '&nbsp;';
   $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... ) | 编辑| 举报| 收藏

旧一篇:我来到了上海。。决心踏踏实实做点事情 | 新一篇:面对选择,我茫然....

  • 发表评论
  • 评论内容:
  •  
Copyright © dfmz007
Powered by CSDN Blog