php 分页类 扩展代码


Posted in PHP onJune 11, 2009

原来发表过一个脱离数据库的分页类,最近使用的时候发现有些时候搜索的东西过于大的时候,采用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(); 
*/ 
?>
PHP 相关文章推荐
用PHP查询搜索引擎排名位置的代码
Jan 05 PHP
PHP学习笔记 用户注册模块用户类以及验证码类
Sep 20 PHP
php 注释规范
Mar 29 PHP
PHP 安全检测代码片段(分享)
Jul 05 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
Jun 10 PHP
php实现的IMEI限制的短信验证码发送类
May 05 PHP
PHP程序员不应该忽略的3点
Oct 09 PHP
php自动加载方式集合
Apr 04 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
Apr 27 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
Aug 25 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 PHP
实例化php类时传参的方法分析
Jun 05 PHP
PHP 输出简单动态WAP页面
Jun 09 #PHP
Windows PHP5和Apache的安装与配置
Jun 08 #PHP
phpMyAdmin 安装配置方法和问题解决
Jun 08 #PHP
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
Jun 08 #PHP
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
Jun 08 #PHP
Windows IIS PHP 5.2 安装与配置方法
Jun 08 #PHP
PHP 组件化编程技巧
Jun 06 #PHP
You might like
PHP编程中八种常见的文件操作方式
2006/11/19 PHP
用php或asp创建网页桌面快捷方式的代码
2010/03/23 PHP
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
PHP7常量数组用法分析
2016/09/26 PHP
基于jquery的cookie的用法
2011/01/10 Javascript
简约JS日历控件 实例代码
2013/07/12 Javascript
javascript随机将第一个dom中的图片添加到第二个div中示例
2013/10/08 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
2014/12/18 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
详解使用jQuery.i18n.properties实现js国际化
2018/05/04 jQuery
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:奇迹哥卡尔秀翻全场
2017/03/28 DOTA
[01:16:13]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第一场 2月22日
2021/03/11 DOTA
Python+微信接口实现运维报警
2016/08/27 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
Numpy的简单用法小结
2019/08/28 Python
python时间日期操作方法实例小结
2020/02/06 Python
浅谈python的elementtree模块处理中文注意事项
2020/03/06 Python
基于opencv实现简单画板功能
2020/08/02 Python
python安装及变量名介绍详解
2020/12/12 Python
CSS实现定位元素居中的方法
2015/06/23 HTML / CSS
澳大利亚在线购买葡萄酒:The Wine Collective
2020/02/20 全球购物
C语言笔试题
2014/09/04 面试题
大学生毕业自荐信
2013/10/10 职场文书
车间工艺员岗位职责
2013/12/09 职场文书
思想汇报格式
2014/01/05 职场文书
Python图像处理之图像拼接
2021/04/28 Python
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js