pager.init.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <?php
  2. if (!defined('IS_INITPHP')) exit('Access Denied!');
  3. /*********************************************************************************
  4. * InitPHP 3.3 国产PHP开发框架 扩展类库-分页类
  5. *-------------------------------------------------------------------------------
  6. * 版权所有: CopyRight By initphp.com
  7. * 您可以自由使用该源码,但是在使用过程中,请保留作者信息。尊重他人劳动成果就是尊重自己
  8. *-------------------------------------------------------------------------------
  9. * $Author:zhuli
  10. * $Dtime:2013-5-29
  11. ***********************************************************************************/
  12. class pagerInit {
  13. private $show_num = 9; //分页中显示多少个
  14. private $conf = array(
  15. 'first_last'=> 1, //首页-尾页 0-关闭 1-开启
  16. 'back_next' => 1, //上一页-下一页 0-关闭 1-开启
  17. 'total_num' => 1, //是否显示总页数 0-关闭 1-开启
  18. 'page_num' => 1, //翻页数 0-关闭 1-开启
  19. 'select' => 1 //下拉列表选择 0-关闭 1-开启
  20. );
  21. private $style_config = '<style type="text/css">
  22. .InitPHP_pages {font:12px/1.6em Helvetica, Arial, sans-serif;overflow:hidden; text-align:center; font-family:Verdana;margin-bottom:5px; }
  23. .InitPHP_pages a, .pages{ margin:0 1px; padding:1px 6px; border:1px solid #E4E4E4; text-decoration:none!important; }
  24. .InitPHP_pages a:hover { border-color:#369; }
  25. .InitPHP_pages strong { margin:0 1px; padding:2px 6px; border-color:#369; background:#369; color:#FFF; text-decoration:none!important; }
  26. .InitPHP_pages .back { padding:4px 6px 1px 20px!important; padding:4px 6px 2 20px; font-family:simsun; }
  27. .InitPHP_pages .next { padding:4px 20px 1px 6px!important; padding:4px 20px 2 6px; font-family:simsun; }
  28. .InitPHP_pages .first { padding:4px 6px 1px 4px!important; padding:4px 6px 2 4px; font-family:simsun; }
  29. .InitPHP_pages .last { padding:4px 4px 1px 6px!important; padding:4px 4px 2 6px; font-family:simsun; }
  30. </style>';
  31. /**
  32. * 分页-分页入口
  33. * @param int $count 总共多少数据
  34. * @param int $prepage 每页显示多少页
  35. * @param int $url URL
  36. * @return string
  37. */
  38. public function pager($count, $prepage, $url, $default_style = false) {
  39. $count = (int) $count;
  40. $prepage = (int) $prepage;
  41. $page_num = ceil($count / $prepage); //总共多少页
  42. $page = (int) $_GET['page'];
  43. $page = ($page > $page_num) ? $page_num : ($page = ($page < 1) ? 1 : $page);
  44. $url = (strpos($url, '?') === false) ? $url . '?' : $url;
  45. return $this->pager_html($page_num, $url, $page, $default_style);
  46. }
  47. /**
  48. * 分页-获取分页HTML显示
  49. * @param int $page_num 页数
  50. * @param string $url URL
  51. * @param int $page 当前页
  52. * @return string
  53. */
  54. private function pager_html($page_num, $url, $page, $default_style) {
  55. list($start, $end) = $this->get_satrt_and_end($page, $page_num);
  56. list($back, $next) = $this->get_pager_next_back_html($url, $page, $page_num);
  57. list($first, $last) = $this->get_first_last_html($page_num, $url);
  58. if ($default_style == true) {
  59. $html = $this->style_config . "<div class='InitPHP_pages'>";
  60. } else {
  61. $html = "<div class='InitPHP_pages'>";
  62. }
  63. $html .= $back;
  64. $html .= $first;
  65. $html .= $this->get_pager_num_html($start, $end, $url, $page);
  66. $html .= $last;
  67. $html .= $next;
  68. $html .= $this->get_total_num_html($page_num);
  69. $html .= $this->get_select_html($page_num, $url, $page);
  70. $html .= '</div>';
  71. return $html;
  72. }
  73. /**
  74. * 分页-获取分页数字的列表
  75. * @param int $start 开始数
  76. * @param int $end 结束数
  77. * @param string $url URL地址
  78. * @param int $page 当前页
  79. * @return string
  80. */
  81. private function get_pager_num_html($start, $end, $url, $page) {
  82. if ($this->conf['page_num'] == 0) return ''; //是否开启
  83. $html = '';
  84. for ($i=$start; $i<=$end; $i++) {
  85. if ($i == $page) {
  86. $html .= "<strong>{$i}</strong>";
  87. } else {
  88. $html .= "<a href='{$url}&page={$i}'>{$i}</a>";
  89. }
  90. }
  91. return $html;
  92. }
  93. /**
  94. * 分页-分页总页数显示
  95. * @param int $page_num 页数
  96. * @return string
  97. */
  98. private function get_total_num_html($page_num) {
  99. if ($this->conf['total_num'] == 0) return ''; //是否开启
  100. return "&nbsp;&nbsp;共{$page_num}页";
  101. }
  102. /**
  103. * 分页-分页首页和尾页显示
  104. * @param int $page_num 页数
  105. * @param string $url URL地址
  106. * @return string
  107. */
  108. private function get_first_last_html($page_num, $url) {
  109. if ($this->conf['first_last'] == 0) return array('', ''); //是否开启
  110. $first = "<a href='{$url}&page=1' class='first'>首页</a>";
  111. $last = "<a href='{$url}&page={$page_num}' class='last'>尾页</a>";
  112. return array($first, $last);
  113. }
  114. /**
  115. * 分页-获取分页上一页-下一页HTML
  116. * @param string $url URL地址
  117. * @param int $page 当前页
  118. * @param int $page_num 页数
  119. * @return string
  120. */
  121. private function get_pager_next_back_html($url, $page, $page_num) {
  122. if ($this->conf['back_next'] == 0) return array('', ''); //是否开启
  123. $next_page = $page + 1;
  124. $next = "<a href='{$url}&page={$next_page}' class='next'>下一页</a>";
  125. if ($page == $page_num) $next = '';
  126. $back_page = $page - 1;
  127. $back = "<a href='{$url}&page={$back_page}' class='back'>上一页</a>";
  128. if ($page == 1) $back = '';
  129. return array($back, $next);
  130. }
  131. /**
  132. * 分页-Select选择器
  133. * @param int $page_num 页数
  134. * @param string $url URL地址
  135. * @param int $page 当前页
  136. * @return string
  137. */
  138. private function get_select_html($page_num, $url, $page) {
  139. if ($this->conf['select'] == 0) return '';
  140. $html = '&nbsp;&nbsp;<select name="select" onchange="javascript:window.location.href=this.options[this.selectedIndex].value">';
  141. for ($i=1; $i<=$page_num; $i++){
  142. if ($page == $i) {
  143. $selected = ' selected';
  144. } else {
  145. $selected = '';
  146. }
  147. $html.="<option value='{$url}&page={$i}' {$selected}>{$i}</option>";
  148. }
  149. $html .= '</select>';
  150. return $html;
  151. }
  152. /**
  153. * 分页-获取分页显示数字
  154. * @param int $page 当前页
  155. * @param int $page_num 页数
  156. * @return array(start, end)
  157. */
  158. private function get_satrt_and_end($page, $page_num) {
  159. $temp = floor($this->show_num / 2);
  160. if ($page_num < $this->show_num) return array(1, $page_num);
  161. if ($page <= $temp) {
  162. $start = 1;
  163. $end = $this->show_num;
  164. } elseif (($page_num - $temp) < $page) {
  165. $start = $page_num - $this->show_num + 1;
  166. $end = $page_num;
  167. } else {
  168. $start = $page - $temp;
  169. $end = $page - $temp + $this->show_num - 1;
  170. }
  171. return array($start, $end);
  172. }
  173. }