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.MVC的模板标签系统(四)
Sep 05 PHP
PHP+javascript液晶时钟
Oct 09 PHP
discuz的php防止sql注入函数
Jan 17 PHP
PHP在特殊字符前加斜杠的实现代码
Jul 17 PHP
PHP中用hash实现的数组
Jul 17 PHP
PHP可变函数的使用详解
Jun 14 PHP
详解php魔术方法(Magic methods)的使用方法
Feb 14 PHP
深入剖析PHP中printf()函数格式化使用
May 23 PHP
php下载文件,添加响应头的简单实例
Sep 22 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
Aug 21 PHP
php操作redis命令及代码实例大全
Nov 19 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
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
百度留言本js 大家可以参考下
2009/10/13 Javascript
jquery 简单的进度条实现代码
2010/03/11 Javascript
jQuery中jqGrid分页实现代码
2011/11/04 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
Nodejs中自定义事件实例
2014/06/20 NodeJs
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
利用forever和pm2部署node.js项目过程
2017/05/10 Javascript
Angularjs的$http异步删除数据详解及实例
2017/07/27 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
javascript字体颜色控件的开发 JS实现字体控制
2017/11/27 Javascript
微信小程序+腾讯地图开发实现路径规划绘制
2019/05/22 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
爬山算法简介和Python实现实例
2014/04/26 Python
深入分析在Python模块顶层运行的代码引起的一个Bug
2014/07/04 Python
python实现字符串和日期相互转换的方法
2015/05/13 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
python变量的存储原理详解
2019/07/10 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
Python字典实现伪切片功能
2020/10/28 Python
SQL SERVER面试资料
2013/03/30 面试题
自主招生自荐信指南
2014/02/04 职场文书
应届生自荐信范文
2014/02/21 职场文书
《雪地里的小画家》教学反思
2014/02/22 职场文书
学校爱国卫生月活动总结
2014/06/25 职场文书
中学生纪念九一八事变演讲稿
2014/09/14 职场文书
优秀教师单行材料
2014/12/16 职场文书
2015年医生个人工作总结
2015/04/25 职场文书
代理词怎么写
2015/05/25 职场文书
2016廉政教育学习心得体会
2016/01/25 职场文书
优秀党员先进事迹材料2016
2016/02/29 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
golang 实现并发求和
2021/05/08 Golang
MySQL去除密码登录告警的方法
2022/04/20 MySQL