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 相关文章推荐
第一节--面向对象编程
Nov 16 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
Jun 09 PHP
探讨PHP调用时间格式的参数详解
Jun 06 PHP
php弹出对话框实现重定向代码
Jan 23 PHP
PHP四大安全策略
Mar 12 PHP
php使用curl和正则表达式抓取网页数据示例
Apr 13 PHP
PHP延迟静态绑定示例分享
Jun 22 PHP
PHP扩展开发入门教程
Feb 26 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
Jun 20 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
Dec 08 PHP
php中static和const关键字用法分析
Dec 07 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
Aug 07 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
中东人咖啡哲学
2021/03/03 咖啡文化
Laravel5.7 Eloquent ORM快速入门详解
2019/04/12 PHP
htm调用JS代码
2007/03/15 Javascript
javascript new 需不需要继续使用
2009/07/02 Javascript
各情景下元素宽高的获取实现代码
2011/09/13 Javascript
js 控制下拉菜单刷新的方法
2013/03/03 Javascript
去掉gridPanel表头全选框的小例子
2013/07/18 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
Nodejs极简入门教程(二):定时器
2014/10/25 NodeJs
js实现带圆角的两级导航菜单效果代码
2015/08/24 Javascript
javascript实现自动输出文本(打字特效)
2015/08/27 Javascript
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
单击按钮发送验证码,出现倒计时的简单实例
2017/03/17 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
js实现一个简易计算器
2020/03/30 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
python基础教程之基本内置数据类型介绍
2014/02/20 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
详解python的四种内置数据结构
2019/03/19 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
django使用xadmin的全局配置详解
2019/11/15 Python
python实现异常信息堆栈输出到日志文件
2019/12/26 Python
Python属性和内建属性实例解析
2020/01/14 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
使用Html5实现异步上传文件,支持跨域,带有上传进度条
2016/09/17 HTML / CSS
大学生求职简历的自我评价
2013/10/14 职场文书
财务管理专业推荐信
2013/11/19 职场文书
医院辞职信范文
2014/01/17 职场文书
乡镇党建工作汇报材料
2014/08/14 职场文书
2014年党小组工作总结
2014/12/20 职场文书
迎新生晚会主持词
2015/06/30 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python
实例详解Python的进程,线程和协程
2022/03/13 Python
ipad隐藏软件app图标方法
2022/04/19 数码科技