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运行时强制显示出错信息的代码
Apr 20 PHP
PHP数据流应用的一个简单实例
Sep 14 PHP
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
Jan 27 PHP
PHP图片库imagemagick安装方法
Sep 23 PHP
PHP+jQuery 注册模块开发详解
Oct 14 PHP
对PHP PDO的一些认识小结
Jan 23 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
Sep 11 PHP
php将html转为图片的实现方法
May 19 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
Oct 23 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
May 24 PHP
浅谈PHP中的那些魔术常量
Dec 02 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网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
php倒计时出现-0情况的解决方法
2016/07/28 PHP
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
AngularJS实现路由实例
2017/02/12 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
2017/09/06 Javascript
vue router仿天猫底部导航栏功能
2017/10/18 Javascript
nodejs发送http请求时遇到404长时间未响应的解决方法
2017/12/10 NodeJs
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
Vue动画事件详解及过渡动画实例
2019/02/09 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
小程序实现列表倒计时功能
2021/01/29 Javascript
python基础教程之lambda表达式使用方法
2014/02/12 Python
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
在MAC上搭建python数据分析开发环境
2016/01/26 Python
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
浅谈python中get pass用法
2019/03/19 Python
Python序列对象与String类型内置方法详解
2019/10/22 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
2020/05/16 Python
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
丽笙酒店官方网站:Radisson Hotels
2019/05/07 全球购物
越南综合购物网站:Lazada越南
2019/06/10 全球购物
strlen的几种不同实现方法
2013/05/31 面试题
如何写一个自定义标签
2012/12/28 面试题
大学本科毕业生求职信范文
2013/12/18 职场文书
自荐信如何制作?
2014/02/21 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
欢迎家长标语
2014/10/08 职场文书
社区党建工作汇报材料
2014/10/27 职场文书
2015年党总支工作总结
2015/05/25 职场文书
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL
Vue Element plus使用方法梳理
2022/12/24 Vue.js