php 分页类 扩展代码
2015-01-24信息快讯网
采用url传递参数的方式,可能会有一定的影响或者叫已知的bug,这次做了一些扩展,同时兼容了以前的模式
原来发表过一个脱离数据库的分页类,最近使用的时候发现有些时候搜索的东西过于大的时候,采用url传递参数的方式,可能会有一定的影响或者叫已知的bug,这次做了一些扩展,同时兼容了以前的模式,使用上面很简单的,只需要多设置一个参数就可以了代码如下:<?php /** * 功能: 分页类,根据提供的数据总量和页面大小 * 创建日期:Fri Apr 20 16:45:21 CST 2007 * 最后更新: * 作者: sanshi <[email protected]> */ 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(); */ ?>
php算开始时间到过期时间的相隔的天数
php数据库密码的找回的步骤
重新封装zend_soap实现http连接安全认证的php代码
php 变量未定义等错误的解决方法
兼容性比较好的PHP生成缩略图的代码
PHP分页函数代码(简单实用型)
php下封装较好的数字分页方法
PHP 分页类代码(简单好用型)第1/2页
ajax实现无刷新分页(php)
php文章内容分页并生成相应的htm静态页面代码
又一个php 分页类实现代码
PHP 分页类(模仿google)-面试题目解答
php MsSql server时遇到的中文编码问题
PHP 输出简单动态WAP页面
Windows PHP5和Apache的安装与配置
phpMyAdmin 安装配置方法和问题解决
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
php mssql 分页SQL语句优化 持续影响
AspNetAjaxPager,Asp.Net通用无刷新Ajax分页控件,支持多样式多数据绑定
php adodb分页实现代码
php 结果集的分页实现代码
简化php模板页面中分页代码的解析
PHP ajax 分页类代码
php相当简单的分页类
php仿ZOL分页类代码
PHP通用分页类page.php[仿google分页]
php mysql数据库操作分页类