Discuz教程网

PHP 分页类 扩展代码

[复制链接]
authicon dly 发表于 2011-9-5 20:17:59 | 显示全部楼层 |阅读模式
原来发表过一个脱离数据库的分页类,最近使用的时候发现有些时候搜索的东西过于大的时候,采用url传递参数的方式,可能会有一定的影响或者叫已知的bug,这次做了一些扩展,同时兼容了以前的模式,使用上面很简单的,只需要多设置一个参数就可以了代码如下:
代码如下:

  1. <?php
  2. /**
  3. * 功能: 分页类,根据提供的数据总量和页面大小
  4. * 创建日期:Fri Apr 20 16:45:21 CST 2007
  5. * 最后更新:
  6. * 作者: sanshi <sanshi0815@tom.com>
  7. */

  8. class pagination
  9. {
  10. var $result = array();
  11. var $pVar = "myp";//page参数分页记数
  12. var $urlParamStr = ""; //页面的所有参数
  13. var $sqlMoveNumber = 0; //数据的偏移量
  14. var $is_post = false;

  15. public function pagination()
  16. {

  17. }
  18. public function set($sum,$pageSize,$page="",$is_post = false)
  19. {
  20. $this->is_post = $is_post;
  21. $this->pVar = defined('PAGE_BAR') ? PAGE_BAR : 'myp' ;
  22. $url = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
  23. //计算出总页数
  24. $curPage = $this->getCurPage();

  25. $temp['sumPage'] = ceil($sum/$pageSize);
  26. //修改了,页码超出的bug
  27. if($curPage>$temp['sumPage']) $curPage=$temp['sumPage'];
  28. $temp['curPage'] = $curPage;
  29. $temp['nextPage'] = $temp['sumPage'] > $curPage ? ($curPage+1) : $temp['sumPage'];
  30. $temp['upPage'] = $curPage >1 ? $curPage-1 :1;
  31. $temp['endPage'] = $temp['sumPage'];
  32. $this->urlParamStr = $this->_makeUrl($url);
  33. $temp['urlPageStr'] = ($page=="") ? $this->_makeUrl($url) : $page.$this->urlParamStr;

  34. $this->sqlMoveNumber = $curPage <2 ? 0 : ($curPage-1)*$pageSize;
  35. $temp['sqlMoveNumber'] = $this->sqlMoveNumber;
  36. $temp['rowNo'] = $sum;
  37. $this->result = $temp;
  38. return $this->result;
  39. //print_r($temp);exit();
  40. }
  41. public function getSqlMove()
  42. {
  43. return $this->sqlMoveNumber;
  44. }
  45. public function getFooter()
  46. {
  47. $str= "共有 <FONT COLOR=#FF0033>{$this->result['rowNo']}</FONT> 条 <a href='{$this->result['urlPageStr']}{$this->result['upPage']}'";
  48. if($this->is_post) $str .=" onclick='return sanshi_page_post(this.href,{$this->result['upPage']});' ";
  49. $str .=" >上一页</a> ";
  50. $str .=" 当前 {$this->result['curPage']} 页";
  51. $str .=" 共有 {$this->result['sumPage']} 页";
  52. $str .=" <a href='{$this->result['urlPageStr']}{$this->result['nextPage']}'";
  53. if($this->is_post) $str .=" onclick='return sanshi_page_post(this.href,{$this->result['nextPage']});' ";
  54. $str .=" >下一页</a>";
  55. return $str;
  56. }
  57. public function getJumpPage()
  58. {
  59. if($this->is_post)
  60. {
  61. $str = " 跳到第 <select name='topage' size='1' onchange='sanshi_page_post("{$this->result['urlPageStr']}"+this.value,this.value)'>\n";
  62. }else{
  63. $str = " 跳到第 <select name='topage' size='1' onchange='window.location="{$this->result['urlPageStr']}"+this.value'>\n";
  64. }
  65. for($i=1;$i<=$this->result['sumPage'];$i++)
  66. {
  67. $str .= ($i==$this->result['curPage']) ? "<option value='$i' selected>$i</option>\n" : "<option value='$i'>$i</option>\n";
  68. }
  69. $str.="</select> 页";
  70. //输出form表单
  71. if($this->is_post)
  72. {
  73. $str .="<script type="text/javascript"><!--
  74. function sanshi_page_post(jump_link,page_no)
  75. {
  76. document.getElementById('sanshi_goPage').action = jump_link; document.getElementById('{$this->pVar}').value = page_no;
  77. document.getElementById('sanshi_goPage').submit();
  78. return false;
  79. }

  80. // --></script>";
  81. $str .="<form name='sanshi_goPage' id='sanshi_goPage' method=post>";
  82. $str .="<input type="hidden" name='{$this->pVar}' id='{$this->pVar}' value=0>";
  83. $_POST = isset($_POST) ? $_POST : array();
  84. foreach($_POST AS $k=>$v)
  85. {
  86. $str .="<input type="hidden" name="{$k}" id="{$k}" value="{$v}">";
  87. }
  88. $str .="</form>";
  89. }
  90. return $str;
  91. }
  92. public function getCurPage()
  93. {
  94. return isset($_GET[$this->pVar]) ? intval($_GET[$this->pVar]) : 1 ;
  95. }
  96. //分析出url的参数返回?后的参数,页码为空 包括问号
  97. private function _makeUrl($url)
  98. {
  99. $arrayUrl=parse_url($url);
  100. if(isset($arrayUrl['query']))
  101. {
  102. $q=$arrayUrl['query'];
  103. parse_str($q,$qParam);
  104. //print_r($qParam);
  105. if(array_key_exists($this->pVar,$qParam))
  106. {
  107. foreach ($qParam AS $k=>$v)
  108. {
  109. if($k !=$this->pVar) $temp[$k] = $v;
  110. }
  111. $temp[$this->pVar] = "";
  112. if(function_exists("http_build_query"))
  113. return '?'.http_build_query($temp);
  114. else
  115. return '?'.sanshi_http_build_query($temp);
  116. }else {
  117. return "?{$q}&{$this->pVar}=";
  118. }
  119. }else{
  120. return "?{$this->pVar}=";
  121. }

  122. }
  123. }
  124. function sanshi_http_build_query($a,$b='',$c=0)
  125. {
  126. if (!is_array($a)) return false;
  127. foreach ((array)$a as $k=>$v)
  128. {
  129. if ($c)
  130. $k=$b."[".$k."]";
  131. elseif (is_int($k))
  132. $k=$b.$k;
  133. if (is_array($v)||is_object($v))
  134. {
  135. $r[]=http_build_query($v,$k,1);
  136. continue;
  137. }
  138. $r[]=$k."=".urlencode($v);
  139. }
  140. return implode("&",$r);
  141. }
  142. /*
  143. //print_r($_SERVER);
  144. $p = new pagination();
  145. $p->set(10,2,'thi.php');
  146. echo $p->getFooter();
  147. echo $p->getJumpPage();
  148. */
  149. ?>
复制代码







上一篇:PHP 常量、变量、全局变量等定义方法
下一篇:Windows PHP5和Apache的安装与配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-2 16:21

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表