原来发表过一个脱离数据库的分页类,最近使用的时候发现有些时候搜索的东西过于大的时候,采用url传递参数的方式,可能会有一定的影响或者叫已知的bug,这次做了一些扩展,同时兼容了以前的模式,使用上面很简单的,只需要多设置一个参数就可以了代码如下:
代码如下:
- <?php
- /**
- * 功能: 分页类,根据提供的数据总量和页面大小
- * 创建日期:Fri Apr 20 16:45:21 CST 2007
- * 最后更新:
- * 作者: sanshi <sanshi0815@tom.com>
- */
- class pagination
- {
- var $result = array();
- var $pVar = "myp";//page参数分页记数
- var $urlParamStr = ""; //页面的所有参数
- var $sqlMoveNumber = 0; //数据的偏移量
- var $is_post = false;
- public function pagination()
- {
- }
- public function set($sum,$pageSize,$page="",$is_post = false)
- {
- $this->is_post = $is_post;
- $this->pVar = defined('PAGE_BAR') ? PAGE_BAR : 'myp' ;
- $url = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
- //计算出总页数
- $curPage = $this->getCurPage();
- $temp['sumPage'] = ceil($sum/$pageSize);
- //修改了,页码超出的bug
- if($curPage>$temp['sumPage']) $curPage=$temp['sumPage'];
- $temp['curPage'] = $curPage;
- $temp['nextPage'] = $temp['sumPage'] > $curPage ? ($curPage+1) : $temp['sumPage'];
- $temp['upPage'] = $curPage >1 ? $curPage-1 :1;
- $temp['endPage'] = $temp['sumPage'];
- $this->urlParamStr = $this->_makeUrl($url);
- $temp['urlPageStr'] = ($page=="") ? $this->_makeUrl($url) : $page.$this->urlParamStr;
- $this->sqlMoveNumber = $curPage <2 ? 0 : ($curPage-1)*$pageSize;
- $temp['sqlMoveNumber'] = $this->sqlMoveNumber;
- $temp['rowNo'] = $sum;
- $this->result = $temp;
- return $this->result;
- //print_r($temp);exit();
- }
- public function getSqlMove()
- {
- return $this->sqlMoveNumber;
- }
- public function getFooter()
- {
- $str= "共有 <FONT COLOR=#FF0033>{$this->result['rowNo']}</FONT> 条 <a href='{$this->result['urlPageStr']}{$this->result['upPage']}'";
- if($this->is_post) $str .=" onclick='return sanshi_page_post(this.href,{$this->result['upPage']});' ";
- $str .=" >上一页</a> ";
- $str .=" 当前 {$this->result['curPage']} 页";
- $str .=" 共有 {$this->result['sumPage']} 页";
- $str .=" <a href='{$this->result['urlPageStr']}{$this->result['nextPage']}'";
- if($this->is_post) $str .=" onclick='return sanshi_page_post(this.href,{$this->result['nextPage']});' ";
- $str .=" >下一页</a>";
- return $str;
- }
- public function getJumpPage()
- {
- if($this->is_post)
- {
- $str = " 跳到第 <select name='topage' size='1' onchange='sanshi_page_post("{$this->result['urlPageStr']}"+this.value,this.value)'>\n";
- }else{
- $str = " 跳到第 <select name='topage' size='1' onchange='window.location="{$this->result['urlPageStr']}"+this.value'>\n";
- }
- for($i=1;$i<=$this->result['sumPage'];$i++)
- {
- $str .= ($i==$this->result['curPage']) ? "<option value='$i' selected>$i</option>\n" : "<option value='$i'>$i</option>\n";
- }
- $str.="</select> 页";
- //输出form表单
- if($this->is_post)
- {
- $str .="<script type="text/javascript"><!--
- function sanshi_page_post(jump_link,page_no)
- {
- document.getElementById('sanshi_goPage').action = jump_link; document.getElementById('{$this->pVar}').value = page_no;
- document.getElementById('sanshi_goPage').submit();
- return false;
- }
- // --></script>";
- $str .="<form name='sanshi_goPage' id='sanshi_goPage' method=post>";
- $str .="<input type="hidden" name='{$this->pVar}' id='{$this->pVar}' value=0>";
- $_POST = isset($_POST) ? $_POST : array();
- foreach($_POST AS $k=>$v)
- {
- $str .="<input type="hidden" name="{$k}" id="{$k}" value="{$v}">";
- }
- $str .="</form>";
- }
- return $str;
- }
- public function getCurPage()
- {
- return isset($_GET[$this->pVar]) ? intval($_GET[$this->pVar]) : 1 ;
- }
- //分析出url的参数返回?后的参数,页码为空 包括问号
- private function _makeUrl($url)
- {
- $arrayUrl=parse_url($url);
- if(isset($arrayUrl['query']))
- {
- $q=$arrayUrl['query'];
- parse_str($q,$qParam);
- //print_r($qParam);
- if(array_key_exists($this->pVar,$qParam))
- {
- foreach ($qParam AS $k=>$v)
- {
- if($k !=$this->pVar) $temp[$k] = $v;
- }
- $temp[$this->pVar] = "";
- if(function_exists("http_build_query"))
- return '?'.http_build_query($temp);
- else
- return '?'.sanshi_http_build_query($temp);
- }else {
- return "?{$q}&{$this->pVar}=";
- }
- }else{
- return "?{$this->pVar}=";
- }
- }
- }
- function sanshi_http_build_query($a,$b='',$c=0)
- {
- if (!is_array($a)) return false;
- foreach ((array)$a as $k=>$v)
- {
- if ($c)
- $k=$b."[".$k."]";
- elseif (is_int($k))
- $k=$b.$k;
- if (is_array($v)||is_object($v))
- {
- $r[]=http_build_query($v,$k,1);
- continue;
- }
- $r[]=$k."=".urlencode($v);
- }
- return implode("&",$r);
- }
- /*
- //print_r($_SERVER);
- $p = new pagination();
- $p->set(10,2,'thi.php');
- echo $p->getFooter();
- echo $p->getJumpPage();
- */
- ?>
复制代码
|