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个人网站架设连环讲(四)
Oct 09 PHP
改变Apache端口等配置修改方法
Jun 05 PHP
php设计模式 Template (模板模式)
Jun 26 PHP
apache php模块整合操作指南
Nov 16 PHP
php中get_headers函数的作用及用法的详细介绍
Apr 27 PHP
解决file_get_contents无法请求https连接的方法
Dec 17 PHP
ThinkPHP的Widget扩展实例
Jun 19 PHP
全面解读PHP的人气开发框架Laravel
Oct 15 PHP
php版微信数据统计接口用法示例
Oct 12 PHP
PHP实现随机数字、字母的验证码功能
Aug 01 PHP
Thinkphp 5.0实现微信企业付款到零钱
Sep 30 PHP
如何通过Apache在本地配置多个虚拟主机
Jul 29 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字符串过滤,转换函数代码
2012/05/01 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
DEFER怎么用?
2006/07/01 Javascript
javascript eval和JSON之间的联系
2009/12/31 Javascript
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
无限树Jquery插件zTree的常用功能特性总结
2014/09/11 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
javascript实现随时变化着的背景颜色
2015/04/02 Javascript
原生js图片轮播效果实现代码
2016/10/19 Javascript
利用JS实现简单的日期选择插件
2017/01/23 Javascript
JS实现复制内容到剪贴板功能
2017/02/05 Javascript
详解nodejs微信公众号开发——2.自动回复
2017/04/10 NodeJs
JavaScript模块化之使用requireJS按需加载
2017/04/12 Javascript
JavaScript实现简单生成随机颜色的方法
2017/09/21 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
2018/04/04 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
Python中int()函数的用法浅析
2017/10/17 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
python实现剪切功能
2019/01/23 Python
在python下使用tensorflow判断是否存在文件夹的实例
2019/06/10 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
2020/02/17 Python
Django查询优化及ajax编码格式原理解析
2020/03/25 Python
Python爬虫开发与项目实战
2020/12/16 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
夏尔巴人登珠峰品牌:Sherpa Adventure Gear
2018/02/08 全球购物
Carter’s OshKosh加拿大:购买婴幼儿服装和童装
2018/11/27 全球购物
红领巾广播站广播稿
2014/02/01 职场文书
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript