首页 > 开发 > PHP > 正文

两款万能的php分页类

2024-05-04 23:40:19
字体:
来源:转载
供稿:网友

这篇文章主要介绍了万能的php分页类,特别好用,需要使用php分页类的朋友不要错过。

本文为大家分享个超级好用、万能的php分页类,具体的实现代码如下

第一款php分页类

 

 
  1. <?php 
  2. /* 
  3. * To change this template, choose Tools | Templates 
  4. * and open the template in the editor. 
  5. */ 
  6.  
  7. /** 
  8. * 分页类 
  9. * 使用方式: 
  10. * $page = new Page(); 
  11. * $page->init(1000, 20); 
  12. * $page->setNotActiveTemplate('<span>{a}</span>'); 
  13. * $page->setActiveTemplate('{a}'); 
  14. * echo $page->show(); 
  15.  
  16.  
  17. * @author 风居住的地方 
  18. */ 
  19. class Page { 
  20. /** 
  21. * 总条数 
  22. */ 
  23. private $total; 
  24. /** 
  25. * 每页大小 
  26. */ 
  27. private $pageSize; 
  28. /** 
  29. * 总页数 
  30. */ 
  31. private $pageNum; 
  32. /** 
  33. * 当前页 
  34. */ 
  35. private $page; 
  36. /** 
  37. * 地址 
  38. */ 
  39. private $uri; 
  40. /** 
  41. * 分页变量 
  42. */ 
  43. private $pageParam; 
  44. /** 
  45. * LIMIT XX,XX 
  46. */ 
  47. private $limit; 
  48. /** 
  49. * 数字分页显示 
  50. */ 
  51. private $listnum = 8; 
  52. /** 
  53. * 分页显示模板 
  54. * 可用变量参数 
  55. * {total} 总数据条数 
  56. * {pagesize} 每页显示条数 
  57. * {start} 本页开始条数 
  58. * {end} 本页结束条数 
  59. * {pagenum} 共有多少页 
  60. * {frist} 首页 
  61. * {pre} 上一页 
  62. * {next} 下一页 
  63. * {last} 尾页 
  64. * {list} 数字分页 
  65. * {goto} 跳转按钮 
  66. */ 
  67. private $template = '<div><span>共有{total}条数据</span><span>每页显示{pagesize}条数据</span>,<span>本页{start}-{end}条数据</span><span>共有{pagenum}页</span><ul>{frist}{pre}{list}{next}{last}{goto}</ul></div>'
  68. /** 
  69. * 当前选中的分页链接模板 
  70. */ 
  71. private $activeTemplate = '<li class="active"><a href="javascript:;">{text}</a></li>'
  72. /** 
  73. * 未选中的分页链接模板 
  74. */ 
  75. private $notActiveTemplate = '<li><a href="{url}">{text}</a></li>'
  76. /** 
  77. * 显示文本设置 
  78. */ 
  79. private $config = array('frist' => '首页''pre' => '上一页''next' => '下一页''last' => '尾页'); 
  80. /** 
  81. * 初始化 
  82. * @param type $total 总条数 
  83. * @param type $pageSize 每页大小 
  84. * @param type $param url附加参数 
  85. * @param type $pageParam 分页变量 
  86. */ 
  87. public function init($total, $pageSize, $param = '', $pageParam = 'page') { 
  88. $this->total = intval($total); 
  89. $this->pageSize = intval($pageSize); 
  90. $this->pageParam = $pageParam; 
  91. $this->uri = $this->geturi($param); 
  92. $this->pageNum = ceil($this->total / $this->pageSize); 
  93. $this->page = $this->setPage(); 
  94. $this->limit = $this->setlimit(); 
  95.  
  96. /** 
  97. * 设置分页模板 
  98. * @param type $template 模板配置 
  99. */ 
  100. public function setTemplate($template) { 
  101. $this->template = $template; 
  102.  
  103. /** 
  104. * 设置选中分页模板 
  105. * @param type $activeTemplate 模板配置 
  106. */ 
  107. public function setActiveTemplate($activeTemplate) { 
  108. $this->activeTemplate = $activeTemplate; 
  109.  
  110. /** 
  111. * 设置未选中分页模板 
  112. * @param type $notActiveTemplate 模板配置 
  113. */ 
  114. public function setNotActiveTemplate($notActiveTemplate) { 
  115. $this->notActiveTemplate = $notActiveTemplate; 
  116.  
  117. /** 
  118. * 返回分页 
  119. * @return type 
  120. */ 
  121. public function show() { 
  122. return str_ireplace(array( 
  123. '{total}'
  124. '{pagesize}'
  125. '{start}'
  126. '{end}'
  127. '{pagenum}'
  128. '{frist}'
  129. '{pre}'
  130. '{next}'
  131. '{last}'
  132. '{list}'
  133. '{goto}'
  134. ), array( 
  135. $this->total, 
  136. $this->setPageSize(), 
  137. $this->star(), 
  138. $this->end(), 
  139. $this->pageNum, 
  140. $this->frist(), 
  141. $this->prev(), 
  142. $this->next(), 
  143. $this->last(), 
  144. $this->pagelist(), 
  145. $this->gopage(), 
  146. ), $this->template); 
  147.  
  148. /** 
  149. * 获取limit起始数 
  150. * @return type 
  151. */ 
  152. public function getOffset() { 
  153. return ($this->page - 1) * $this->pageSize; 
  154.  
  155. /** 
  156. * 设置LIMIT 
  157. * @return type 
  158. */ 
  159. private function setlimit() { 
  160. return "limit " . ($this->page - 1) * $this->pageSize . ",{$this->pageSize}"
  161.  
  162. /** 
  163. * 获取limit 
  164. * @param type $args 
  165. * @return type 
  166. */ 
  167. public function __get($args) { 
  168. if ($args == "limit") { 
  169. return $this->limit; 
  170. else { 
  171. return null
  172.  
  173. /** 
  174. * 初始化当前页 
  175. * @return int 
  176. */ 
  177. private function setPage() { 
  178. if (!empty($_GET[$this->pageParam])) { 
  179. if ($_GET[$this->pageParam] > 0) { 
  180. if ($_GET[$this->pageParam] > $this->pageNum) 
  181. return $this->pageNum; 
  182. else 
  183. return $_GET[$this->pageParam]; 
  184. return 1; 
  185.  
  186. /** 
  187. * 初始化url 
  188. * @param type $param 
  189. * @return string 
  190. */ 
  191. private function geturi($param) { 
  192. $url = $_SERVER['REQUEST_URI'] . (strpos($_SERVER['REQUEST_URI'], "?") ? "" : "?") . $param; 
  193. $parse = parse_url($url); 
  194. if (isset($parse["query"])) { 
  195. parse_str($parse["query"], $params); 
  196. unset($params["page"]); 
  197. $url = $parse["path"] . "?" . http_build_query($params); 
  198. return $url; 
  199. else { 
  200. return $url; 
  201.  
  202. /** 
  203. * 本页开始条数 
  204. * @return int 
  205. */ 
  206. private function star() { 
  207. if ($this->total == 0) { 
  208. return 0; 
  209. else { 
  210. return ($this->page - 1) * $this->pageSize + 1; 
  211.  
  212. /** 
  213. * 本页结束条数 
  214. * @return type 
  215. */ 
  216. private function end() { 
  217. return min($this->page * $this->pageSize, $this->total); 
  218.  
  219. /** 
  220. * 设置当前页大小 
  221. * @return type 
  222. */ 
  223. private function setPageSize() { 
  224. return $this->end() - $this->star() + 1; 
  225.  
  226. /** 
  227. * 首页 
  228. * @return type 
  229. */ 
  230. private function frist() { 
  231. $html = ''
  232. if ($this->page == 1) { 
  233. $html .= $this->replace("{$this->uri}&page=1", $this->config['frist'], true); 
  234. else { 
  235. $html .= $this->replace("{$this->uri}&page=1", $this->config['frist'], false); 
  236. return $html; 
  237.  
  238. /** 
  239. * 上一页 
  240. * @return type 
  241. */ 
  242. private function prev() { 
  243. $html = ''
  244. if ($this->page > 1) { 
  245. $html .= $this->replace($this->uri.'&page='.($this->page - 1), $this->config['pre'], false); 
  246. else { 
  247. $html .= $this->replace($this->uri.'&page='.($this->page - 1), $this->config['pre'], true); 
  248. return $html; 
  249.  
  250. /** 
  251. * 分页数字列表 
  252. * @return type 
  253. */ 
  254. private function pagelist() { 
  255. $linkpage = ""
  256. $lastlist = floor($this->listnum / 2); 
  257. for ($i = $lastlist; $i >= 1; $i--) { 
  258. $page = $this->page - $i; 
  259. if ($page >= 1) { 
  260. $linkpage .= $this->replace("{$this->uri}&page={$page}", $page, false); 
  261. else { 
  262. continue
  263. $linkpage .= $this->replace("{$this->uri}&page={$this->page}", $this->page, true); 
  264. for ($i = 1; $i <= $lastlist; $i++) { 
  265. $page = $this->page + $i; 
  266. if ($page <= $this->pageNum) { 
  267. $linkpage .= $this->replace("{$this->uri}&page={$page}", $page, false); 
  268. else { 
  269. break
  270. return $linkpage; 
  271.  
  272. /** 
  273. * 下一页 
  274. * @return type 
  275. */ 
  276. private function next() { 
  277. $html = ''
  278. if ($this->page < $this->pageNum) { 
  279. $html .= $this->replace($this->uri.'&page='.($this->page + 1), $this->config['next'], false); 
  280. else { 
  281. $html .= $this->replace($this->uri.'&page='.($this->page + 1), $this->config['next'], true); 
  282. return $html; 
  283.  
  284. /** 
  285. * 最后一页 
  286. * @return type 
  287. */ 
  288. private function last() { 
  289. $html = ''
  290. if ($this->page == $this->pageNum) { 
  291. $html .= $this->replace($this->uri.'&page='.($this->pageNum), $this->config['last'], true); 
  292. else { 
  293. $html .= $this->replace($this->uri.'&page='.($this->pageNum), $this->config['last'], false); 
  294. return $html; 
  295.  
  296. /** 
  297. * 跳转按钮 
  298. * @return string 
  299. */ 
  300. private function gopage() { 
  301. $html = ''
  302. $html.='<input type="text" value="' . $this->page . '" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>' . $this->pageNum . ')?' . $this->pageNum . ':this.value;location=/'' . $this->uri . '&page=/'+page+/'/'}" style="width:25px;"/><input type="button" onclick="javascript:var page=(this.previousSibling.value>' . $this->pageNum . ')?' . $this->pageNum . ':this.previousSibling.value;location=/'' . $this->uri . '&page=/'+page+/'/'" value="GO"/>'
  303. return $html; 
  304.  
  305. /** 
  306. * 模板替换 
  307. * @param type $replace 替换内容 
  308. * @param type $result 条件 
  309. * @return type 
  310. */ 
  311. private function replace($url, $text, $result = true) { 
  312. $template = ($result ? $this->activeTemplate : $this->notActiveTemplate); 
  313.  
  314. $html = str_replace('{url}', $url, $template); 
  315. $html = str_replace('{text}', $text, $html); 
  316. return $html; 

第二款php分页类

 

 
  1. <?php 
  2. /* 
  3. *本程序文件对分页程序进行了封装 
  4. * 
  5. */ 
  6.  
  7. class Page_Link 
  8. var $page_max = 10; //一组页码的最大数 
  9.  
  10. var $page_num = 10; //总页数 
  11. var $length = 20; //一页的数据条数 
  12.  
  13. var $isNextPage = true
  14. var $isFirstPage = false
  15.  
  16. function Calculation_Page_Num( $total ) 
  17. $this->page_num = ceil( $total / $this->length ); 
  18. return $this->page_num; 
  19.  
  20. function Calculation_Min_Max( $act_page = 1 ) 
  21. // 定义左右偏移量 
  22. $py_left = 0; 
  23. $py_right = 0; 
  24. // 定义左右边界 
  25. $bj_left = 0; 
  26. $bj_right = 0; 
  27. // 定义滚动区间边界 
  28. $gd_left = 0; 
  29. $gd_right = 0; 
  30. // 判断是否需要分组 
  31. if ( ( $this->page_num - $this->page_max ) <= 0 ) 
  32. // 不需要分组 
  33. $bj_left = 1; 
  34. $bj_right = $this->page_num; 
  35. else 
  36. // 要进行分组 
  37. // 判断容量的奇偶 
  38. $tmp = $this->page_max % 2; 
  39. if ( $tmp === 1 ) 
  40. // 奇数 
  41. $py_left = $py_right = ( $this->page_max - 1 ) / 2; 
  42. else 
  43. // 偶数 
  44. $py_left = $this->page_max / 2 - 1; 
  45. $py_right = $this->page_max / 2; 
  46. // 计算滚动区间 
  47. $gd_left = 1 + $py_left; 
  48. $gd_right = $this->page_num - $py_right; 
  49. // 判断当前页是否落入了滚动区间 
  50. if ( $act_page >= $gd_left && $act_page <= $gd_right ) 
  51. // 区间内 
  52. $bj_left = $act_page - $py_left; 
  53. $bj_right = $act_page + $py_right; 
  54. else 
  55. // 区间外 
  56. if ( ( $act_page - $py_left ) <= 1 ) 
  57. // 左侧固定区间 
  58. $bj_left = 1; 
  59. $bj_right = $this->page_max; 
  60. else 
  61. $bj_left = $this->page_num - $this->page_max + 1; 
  62. $bj_right = $this->page_num; 
  63.  
  64. $res = array(); 
  65. $res['min'] = $bj_left; 
  66. $res['max'] = $bj_right; 
  67.  
  68. return $res; 
  69.  
  70. // 主方法 
  71. function make_page( $total, $act_page, $url, $param ) 
  72. $page_num = $this->Calculation_Page_Num( $total ); 
  73. $arr_min_max = $this->Calculation_Min_Max( $act_page ); 
  74.  
  75. if (!eregi("([?|&]$param=)", $url)) { 
  76. $url = strpos($url,"?")===false?$url."?":$url."&"
  77. $url = $url."$param=0"
  78.  
  79. if ( $act_page > $page_num ) 
  80. $act_page = $page_num; 
  81. // 用正则把url改成正规的 
  82. $url = eregi_replace( $param . '=[0-9]+', $param . '=0', $url ); 
  83.  
  84. $res = array(); 
  85. $d = 0; 
  86. for( $i = $arr_min_max['min'];$i <= $arr_min_max['max'];$i++ ) 
  87. if ( $i == $act_page ) 
  88. $res[$d]['url'] = ''
  89. $res[$d]['name'] = $i; 
  90. $res[$d]['no'] = $i; 
  91. else 
  92. $res[$d]['url'] = str_replace( $param . '=0', $param . '=' . $i, $url ); 
  93. $res[$d]['name'] = $i; 
  94. $res[$d]['no'] = $i; 
  95. $d++; 
  96.  
  97. if ( $this->isNextPage ) 
  98. $res = $this->make_before_next_link( $res, $act_page, $url, $param ); 
  99. if ( $this->isFirstPage ) 
  100. $res = $this->make_first_end_link( $res, $act_page, $url, $param ); 
  101. return $res; 
  102. //// 带总页数 
  103. function make_page_with_total( $total, $act_page, $url, $param ) 
  104. $page_num = $this->Calculation_Page_Num( $total ); 
  105. $arr_min_max = $this->Calculation_Min_Max( $act_page ); 
  106.  
  107. if (!eregi("([?|&]$param=)", $url)) { 
  108. $url = strpos($url,"?")===false?$url."?":$url."&"
  109. $url = $url."$param=0"
  110.  
  111. if ( $act_page > $page_num ) 
  112. $act_page = $page_num; 
  113. // 用正则把url改成正规的 
  114. $url = eregi_replace( $param . '=[0-9]+', $param . '=0', $url ); 
  115.  
  116. $res = array(); 
  117. $d = 0; 
  118. for( $i = $arr_min_max['min'];$i <= $arr_min_max['max'];$i++ ) 
  119. if ( $i == $act_page ) 
  120. $res[$d]['url'] = ''
  121. $res[$d]['name'] = $i; 
  122. $res[$d]['no'] = $i; 
  123. else 
  124. $res[$d]['url'] = str_replace( $param . '=0', $param . '=' . $i, $url ); 
  125. $res[$d]['name'] = $i; 
  126. $res[$d]['no'] = $i; 
  127. $d++; 
  128.  
  129. if ( $this->isNextPage ) 
  130. $res = $this->make_before_next_link( $res, $act_page, $url, $param ); 
  131. if ( $this->isFirstPage ) 
  132. $res = $this->make_first_end_link( $res, $act_page, $url, $param ); 
  133.  
  134. $total_num= ceil($total/$this->length); 
  135. $result['total']=$total_num; 
  136. $result['DATA']=$res; 
  137. return $result; 
  138.  
  139. // 附加上一页和下一页 
  140. function make_before_next_link( $arr, $act, $url, $param ) 
  141. $tmp = array(); 
  142.  
  143. $before = $act - 1; 
  144. $next = $act + 1; 
  145.  
  146. if ( $before < 1 ) 
  147. $before = 1; 
  148. $tmp[0]['url'] = ''
  149. $tmp[0]['name'] = "上一页"
  150. $tmp[0]['no'] = $before; 
  151. else 
  152. $tmp[0]['url'] = str_replace( $param . '=0', $param . '=' . $before, $url ); 
  153. $tmp[0]['name'] = "上一页"
  154. $tmp[0]['no'] = $before; 
  155.  
  156. $counts = sizeof( $arr ); 
  157. $tmp_count = sizeof( $tmp ); 
  158. for( $i = 0;$i < $counts;$i++ ) 
  159. $tmp[$tmp_count]['url'] = $arr[$i]['url']; 
  160. $tmp[$tmp_count]['name'] = $arr[$i]['name']; 
  161. $tmp[$tmp_count]['no'] = $arr[$i]['no']; 
  162. $tmp_count++; 
  163.  
  164. if ( $next > $this->page_num ) 
  165. $next = $this->page_num; 
  166. $tmp[$tmp_count]['url'] = ''
  167. $tmp[$tmp_count]['name'] = "下一页"
  168. $tmp[$tmp_count]['no'] = $next; 
  169. else 
  170. $tmp[$tmp_count]['url'] = str_replace( $param . '=0', $param . '=' . $next, $url ); 
  171. $tmp[$tmp_count]['name'] = "下一页"
  172. $tmp[$tmp_count]['no'] = $next; 
  173.  
  174. return $tmp; 
  175.  
  176. // 附加首页和尾页 
  177. function make_first_end_link( $arr, $act, $url, $param ) 
  178. $tmp = array(); 
  179.  
  180. $before = 1; 
  181. $next = $this->page_num; 
  182.  
  183. if ( $act == 1 ) 
  184. $before = 1; 
  185. $tmp[0]['url'] = ''
  186. $tmp[0]['name'] = "首页"
  187. $tmp[0]['no'] = $before; 
  188. else 
  189. $tmp[0]['url'] = str_replace( $param . '=0', $param . '=' . $before, $url ); 
  190. $tmp[0]['name'] = "首页"
  191. $tmp[0]['no'] = $before; 
  192.  
  193. $counts = sizeof( $arr ); 
  194. $tmp_count = sizeof( $tmp ); 
  195. for( $i = 0;$i < $counts;$i++ ) 
  196. $tmp[$tmp_count]['url'] = $arr[$i]['url']; 
  197. $tmp[$tmp_count]['name'] = $arr[$i]['name']; 
  198. $tmp[$tmp_count]['no'] = $arr[$i]['no']; 
  199. $tmp_count++; 
  200.  
  201. if ( $act == $this->page_num ) 
  202. $tmp[$tmp_count]['url'] = ''
  203. $tmp[$tmp_count]['name'] = "尾页"
  204. $tmp[$tmp_count]['no'] = $next; 
  205. else 
  206. $tmp[$tmp_count]['url'] = str_replace( $param . '=0', $param . '=' . $next, $url ); 
  207. $tmp[$tmp_count]['name'] = "尾页"
  208. $tmp[$tmp_count]['no'] = $next; 
  209.  
  210. return $tmp; 
  211.  
  212.  
  213. /** 
  214. * 带上一页<,下一页>,省略号的分页 
  215. * @param int $total 记录总条数 
  216. * @param int $act_page 当前页码 
  217. * @param string $url url 
  218. * @param int $maxpageicon 最大显示页码数 
  219. * @param int $style 上一页,下一页显示样式 
  220. * @param string $param url参数 
  221. */ 
  222. function make_page_with_points( $total,$act_page,$url,$maxpageicon,$style,$param ) 
  223. $page_num = $this->Calculation_Page_Num( $total ); //总页数 
  224. $arr_min_max = $this->Calculation_Min_Max( $act_page ); //最大页,最小页  
  225. if($total==0) 
  226. return ""
  227.  
  228. if( $act_page > $page_num ) 
  229. $act_page = $page_num+1; 
  230. $page_num = $page_num+1; 
  231.  
  232. switch ($style){ 
  233. case 1: 
  234. $name_before = '前一页'
  235. $name_next = '后一页'
  236. break
  237. case 2: 
  238. $name_before = '<'
  239. $name_next = '>'
  240. break
  241. case 3: 
  242. $name_before = '<<'
  243. $name_next = '>>'
  244. break
  245. default
  246. $name_before = '上一页'
  247. $name_next = '下一页'
  248.  
  249. if (!eregi("([?|&]$param=)", $url)) { 
  250. $url = strpos($url,"?")===false?$url."?":$url."&"
  251. $url = $url."$param=0"
  252.  
  253. // 用正则把url改成正规的 
  254. $url = eregi_replace( $param . '=[0-9]+', $param . '=0', $url ); 
  255. $res = array(); 
  256. $no_before = $act_page-1; 
  257. $no_next = $act_page+1; 
  258.  
  259. //总页数如果小于等于初始化最大呈现页数 
  260. if ($page_num<= ($maxpageicon + 1)) 
  261. //如果当前页数是首页 上一页无效 
  262. if ($act_page == 1)  
  263. $res[0]['url'] = ''
  264. $res[0]['name'] = $name_before; 
  265. $res[0]['no'] = $no_before; 
  266. else //上一页有效 
  267. $res[0]['url'] = str_replace( $param . '=0', $param . '=' .($act_page - 1), $url ); 
  268. $res[0]['name'] = $name_before; 
  269. $res[0]['no'] = $no_before;  
  270. //循环添加页码 
  271. $d = 1; 
  272. for ($i = 1; $i <= $page_num; $i++) 
  273. if ($i != $act_page) 
  274. $res[$d]['url'] = str_replace( $param . '=0', $param . '=' . $i, $url ); 
  275. $res[$d]['name'] = $i; 
  276. $res[$d]['no'] = $i; 
  277. else //当前页,页码 
  278. $res[$d]['url'] = ''
  279. $res[$d]['name'] = $i; 
  280. $res[$d]['no'] = $i; 
  281. $res[$d]['attr'] = 'current'
  282. $d++; 
  283. $last_d = count($res); 
  284. //判断尾页 
  285. if($act_page == $page_num) //下一页无效 
  286. $res[$last_d]['url'] = ''
  287. $res[$last_d]['name'] = $name_next; 
  288. $res[$last_d]['no'] = $no_next;  
  289. else 
  290. $res[$last_d]['url'] = str_replace( $param . '=0', $param . '=' .($act_page + 1), $url ); 
  291. $res[$last_d]['name'] = $name_next; 
  292. $res[$last_d]['no'] = $no_next; 
  293. }else if ($page_num > ($maxpageicon + 1))//如果总页数满足添加省略号 
  294. {  
  295. if ($act_page <= $maxpageicon) //如果当前页小于等于初始化数目 
  296. //如果当前页数是首页 上一页无效 
  297. if ($act_page == 1)  
  298. $res[0]['url'] = ''
  299. $res[0]['name'] = $name_before; 
  300. $res[0]['no'] = $no_before; 
  301. else //上一页有效 
  302. $res[0]['url'] = str_replace( $param . '=0', $param . '=' .($act_page - 1), $url ); 
  303. $res[0]['name'] = $name_before; 
  304. $res[0]['no'] = $no_before;  
  305. //循环添加页码 
  306. $d = 1; 
  307. for ($i = 1; $i <= $maxpageicon; $i++) 
  308. if ($i != $act_page) 
  309. $res[$d]['url'] = str_replace( $param . '=0', $param . '=' . $i, $url ); 
  310. $res[$d]['name'] = $i; 
  311. $res[$d]['no'] = $i; 
  312. else //当前页,页码 
  313. $res[$d]['url'] = ''
  314. $res[$d]['name'] = $i; 
  315. $res[$d]['no'] = $i; 
  316. $res[$d]['attr'] = 'current'
  317. $d++; 
  318. $last_d = count($res); 
  319. //添加省略号 
  320. $res[$last_d]['url'] = ''
  321. $res[$last_d]['name'] = '...'
  322. $res[$last_d]['no'] = ''
  323. //总页数 
  324. $res[$last_d+1]['url'] = str_replace( $param . '=0', $param . '=' . $page_num, $url ); 
  325. $res[$last_d+1]['name'] = $page_num; 
  326. $res[$last_d+1]['no'] = $page_num; 
  327. //下一页 
  328. $res[$last_d+1]['url'] = str_replace( $param . '=0', $param . '=' . ($act_page + 1), $url ); 
  329. $res[$last_d+1]['name'] = $name_next; 
  330. $res[$last_d+1]['no'] = $no_next;  
  331. }else//如果当前页大于最大显示页面 
  332. if ($act_page > ($page_num - $maxpageicon))//满足后几页 
  333. //上一页 
  334. $res[0]['url'] = str_replace( $param . '=0', $param . '=' .($act_page - 1), $url ); 
  335. $res[0]['name'] = $name_before; 
  336. $res[0]['no'] = $no_before; 
  337. //第一页 
  338. $res[1]['url'] = str_replace( $param . '=0', $param . '=1', $url ); 
  339. $res[1]['name'] = 1; 
  340. $res[1]['no'] = 1;  
  341. //省略号 
  342. $res[2]['url'] = ''
  343. $res[2]['name'] = '...'
  344. $res[2]['no'] = '';  
  345. $d = 3; 
  346. for ($i = ($page_num - $maxpageicon + 1); $i <= $page_num; $i++) 
  347. if ($i != $act_page) 
  348. $res[$d]['url'] = str_replace( $param . '=0', $param . '=' . $i, $url ); 
  349. $res[$d]['name'] = $i; 
  350. $res[$d]['no'] = $i; 
  351. else //当前页,页码 
  352. $res[$d]['url'] = ''
  353. $res[$d]['name'] = $i; 
  354. $res[$d]['no'] = $i; 
  355. $res[$d]['attr'] = 'current'
  356. $d++; 
  357. $last_d = count($res); 
  358. //判断尾页 
  359. if($act_page == $page_num) //下一页无效 
  360. $res[$last_d]['url'] = ''
  361. $res[$last_d]['name'] = $name_next; 
  362. $res[$last_d]['no'] = $no_next;  
  363. else 
  364. $res[$last_d]['url'] = str_replace( $param . '=0', $param . '=' .($act_page + 1), $url ); 
  365. $res[$last_d]['name'] = $name_next; 
  366. $res[$last_d]['no'] = $no_next; 
  367.  
  368. }else//满足处在中间 
  369. //上一页 
  370. $res[0]['url'] = str_replace( $param . '=0', $param . '=' .($act_page - 1), $url ); 
  371. $res[0]['name'] = $name_before; 
  372. $res[0]['no'] = $no_before; 
  373. //第一页 
  374. $res[1]['url'] = str_replace( $param . '=0', $param . '=1', $url ); 
  375. $res[1]['name'] = 1; 
  376. $res[1]['no'] = 1;  
  377. //省略号 
  378. $res[2]['url'] = ''
  379. $res[2]['name'] = '...'
  380. $res[2]['no'] = '';  
  381. for ($i = ($act_page - ($maxpageicon - 2) / 2); $i <= floor($act_page+($maxpageicon - 2) / 2); $i++) 
  382. $i = ceil($i); 
  383. if ($i != $act_page) 
  384. $res[$d]['url'] = str_replace( $param . '=0', $param . '=' . $i, $url ); 
  385. $res[$d]['name'] = $i; 
  386. $res[$d]['no'] = $i; 
  387. else //当前页,页码 
  388. $res[$d]['url'] = ''
  389. $res[$d]['name'] = $i; 
  390. $res[$d]['no'] = $i; 
  391. $res[$d]['attr'] = 'current'
  392. $d++; 
  393. $last_d = count($res); 
  394. //加省略号 
  395. $res[$last_d]['url'] = ''
  396. $res[$last_d]['name'] = '...'
  397. $res[$last_d]['no'] = ''
  398. //当前页 
  399. $res[$last_d+1]['url'] = str_replace( $param . '=0', $param . '=' . $page_num, $url ); 
  400. $res[$last_d+1]['name'] = $page_num; 
  401. $res[$last_d+1]['no'] = $page_num;  
  402. //下一页 
  403. $res[$last_d+2]['url'] = str_replace( $param . '=0', $param . '=' . ($act_page + 1), $url ); 
  404. $res[$last_d+2]['name'] = $name_next; 
  405. $res[$last_d+2]['no'] = $no_next; 
  406. //exit;  
  407. return $res; 
  408.  
  409. ?> 

以上就是为大家分享的两款php分页类,希望对大家的学习有所帮助。


注:相关教程知识阅读请移步到PHP教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表