原来发表过一个脱离数据库的分页类,最近使用的时候发现有些时候搜索的东西过于大的时候,采用url传递参数的方式,可能会有一定的影响或者叫已知的bug,这次做了一些扩展,同时兼容了以前的模式,使用上面很简单的,只需要多设置一个参数就可以了代码如下:

/**

* 功能: 分页类,根据提供的数据总量和页面大小

* 创建日期:Fri Apr 20 16:45:21 CST 2007

* 最后更新:

* 作者: sanshi

*/

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= "共有 {$this->result['rowNo']} 条 result['upPage']}'";

if($this->is_post) $str .=" οnclick='return sanshi_page_post(this.href,{$this->result['upPage']});' ";

$str .=" >上一页 ";

$str .=" 当前 {$this->result['curPage']} 页";

$str .=" 共有 {$this->result['sumPage']} 页";

$str .=" result['nextPage']}'";

if($this->is_post) $str .=" οnclick='return sanshi_page_post(this.href,{$this->result['nextPage']});' ";

$str .=" >下一页";

return $str;

}

public function getJumpPage()

{

if($this->is_post)

{

$str = " 跳到第 \n";

}else{

$str = " 跳到第 \n";

}

for($i=1;$i<=$this->result['sumPage'];$i++)

{

$str .= ($i==$this->result['curPage']) ? "$i\n" : "$i\n";

}

$str.=" 页";

//输出form表单

if($this->is_post)

{

$str .="

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;

}

// -->";

$str .="

";

$str .="";

$_POST = isset($_POST) ? $_POST : array();

foreach($_POST AS $k=>$v)

{

$str .="";

}

$str .="

";

}

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 分页类 扩展代码相关推荐

  1. php分页类代码带分页样式效果(转)

    php分页类代码,有漂亮的分页样式风格 时间:2016-03-16 09:16:03来源:网络 导读:不错的php分页类代码,将类文件与分页样式嵌入,实现php查询结果的精美分页,对研究php分页原理 ...

  2. php程序里如何实现图片翻页,php图片上传代码一例-php 生成翻页链接(页码)列表的...-带多种分页方式的php分页类_169IT.COM...

    Class PAGE { //类开始 /******************************************************** * $total       记录总数 * $ ...

  3. 使用工具类实现通用分页处理

    使用工具类实现通用分页处理 原文发表在JavaResearch.org http://www.misslog.com/blog/detail.asp?blog_id=6&content_id= ...

  4. hibernate高级工具类(含分页)

    最近笔者在研究一套系统(jeeCMS)的源码,看到他对于hibernate的封装,顿时生出一种惊为天人的感觉,特与诸君分享. 这里面用到了两个基础知识,笔者在这里列一下,对于hibernate不熟悉读 ...

  5. Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)

    package cn.bdqn.mhouse.util;import java.util.ArrayList; import java.util.List;import cn.bdqn.mhouse. ...

  6. php dump utfp,php pchart乱码-使用REST接口获取GeoServer中的...-结合 thinkPHP 分页写成自己分页类_169IT.COM...

    本页文章导读: ▪php pchart乱码      有俩种情况:①:未将中文字符编码格式修改成utf-8 (例子如下:)mb_convert_encoding($data, "html-e ...

  7. php实现分页mssql,PHP操作mssql数据库类,含分页类[分页类原创]

    /** * PHP操作mssql数据库类,含分页类 * Enter description here ... * @author aboc 9986584 2011-04-09 * */ class ...

  8. php 分页类 bootstrap,ThinkPHP分页使用bootstrap样式

    环境:ThinkPHP3.2.3  bootstrap 3 ​​​​​​​最终结果: 编辑Thinkphp/library/page.class.php文件,在分页的的html标签明,外包一个li元素 ...

  9. Mybatis+mysql动态分页查询数据案例——条件类(HouseCondition)

    package cn.bdqn.mhouse.entity; /*** * * 项目名称:house * 类名称:HouseCondition * 类描述: 动态查询房屋信息的条件类 * 创建人:Mu ...

  10. mysql分页取数每一页生成xml_让MyBatis Generator产生的代码支持分页

    本文提供一种方法,让MyBatis Generator产生的代码支持分页,  适用于MySQL. 分析 如果要获取分页信息,使用MySQL语句,我们需要怎么做呢? select * from t_us ...

最新文章

  1. 真是好东西!一组动感的页面加载动画效果
  2. 学习笔记(十七)——redis(CRUD)
  3. 1、CSS样式及其基本语法
  4. [云炬ThinkPython阅读笔记]1.7 调试
  5. ubuntu 重装 nvidia_nvidia-smi指令报错:Failed to initialize NVML: Driver解决
  6. linux学习-用户的特殊 shell 与 PAM 模块
  7. 深度学习之对象检测_深度学习时代您应该阅读的12篇文章,以了解对象检测
  8. 【摘抄】百度分词算法详解:查询处理以及分词技术
  9. Android 系统 (128)---ODM 开发用户常见需求文档(二)
  10. 简述Git(Linux、Android~~开源)
  11. 用于PDF文件转曲,方法介绍
  12. linux分区文件ext4和ext3,在Windows 下读取 Linux 的 ext3/ext4 格式分区 -Ext2Read和Ext2Fsd...
  13. 调用阿里API实现图片验证码识别
  14. 《马克思主义基本原理》复习整理
  15. 情感分析学习笔记(3)——情感传播(sentiment propagation)
  16. Flink 系例 之 Fold
  17. PHP读和写Excel文件
  18. 一年中最后一个月的最后一天说说_最后一天的说说_最后一天的心情说说大全...
  19. 2023年,大型数据中心PUE将降到1.3以下...
  20. python系统字体_Python-matplotlib-中文字体显示和设置

热门文章

  1. python field readonly_Python serializers.ReadOnlyField方法代码示例
  2. 2.2.2 物理层设备(中继器、集线器)
  3. Network 之一 国际标准组织介绍、互联网/因特网、以太网概念区分、协议标准
  4. ARM 之六 Cortex-M 内核中断/异常系统、中断优先级/嵌套 详解
  5. 命令 / Linux / netstat 详解
  6. Cpp 对象模型探索 / delete 运算符内部调用过程分析
  7. Matlab画图中的小技巧
  8. 插件压敏电阻,有哪些?
  9. oracle 恢复 跳过 表空间,Oracle表空间恢复
  10. 百度搜索与推荐引擎的云原生改造