Pager.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <?php
  2. namespace Heanup\Library;
  3. class Pager
  4. {
  5. private static $show_num = 9;
  6. // 分页中显示多少个
  7. private static $conf = array(
  8. 'first_last' => 1, // 首页-尾页 0-关闭 1-开启
  9. 'back_next' => 1, // 上一页-下一页 0-关闭 1-开启
  10. 'total_num' => 1, // 是否显示总页数 0-关闭 1-开启
  11. 'page_num' => 1, // 翻页数 0-关闭 1-开启
  12. 'select' => 1
  13. );
  14. // 下拉列表选择 0-关闭 1-开启
  15. private static $style_config = '<style type="text/css">
  16. .InitPHP_pages {font:12px/1.6em Helvetica, Arial, sans-serif;overflow:hidden; text-align:center; font-family:Verdana;margin-bottom:5px; }
  17. .InitPHP_pages a, .pages{ margin:0 1px; padding:1px 6px; border:1px solid #E4E4E4; text-decoration:none!important; }
  18. .InitPHP_pages a:hover { border-color:#369; }
  19. .InitPHP_pages strong { margin:0 1px; padding:2px 6px; border-color:#369; background:#369; color:#FFF; text-decoration:none!important; }
  20. .InitPHP_pages .back { padding:4px 6px 1px 20px!important; padding:4px 6px 2 20px; font-family:simsun; }
  21. .InitPHP_pages .next { padding:4px 20px 1px 6px!important; padding:4px 20px 2 6px; font-family:simsun; }
  22. .InitPHP_pages .first { padding:4px 6px 1px 4px!important; padding:4px 6px 2 4px; font-family:simsun; }
  23. .InitPHP_pages .last { padding:4px 4px 1px 6px!important; padding:4px 4px 2 6px; font-family:simsun; }
  24. </style><script>function go_to(_target){self.location.href=$(_target).attr("turn-url");}</script>';
  25. /**
  26. * 分页-分页入口
  27. *
  28. * @param int $count
  29. * 总共多少数据
  30. * @param int $prepage
  31. * 每页显示多少页
  32. * @param int $url
  33. * URL
  34. * @return string
  35. */
  36. public static function pager($count, $prepage, $url, $page, $default_style = TRUE): string
  37. {
  38. $count = (int) $count;
  39. $prepage = (int) $prepage;
  40. $page_num = ceil($count / $prepage); // 总共多少页
  41. $page = (int) $page;
  42. $page = ($page > $page_num) ? $page_num : ($page = ($page < 1) ? 1 : $page);
  43. $url = (strpos($url, '?') === false) ? $url . '?' : $url;
  44. return self::pager_html($page_num, $url, $page, $default_style);
  45. }
  46. /**
  47. * 分页-获取分页HTML显示
  48. *
  49. * @param int $page_num
  50. * 页数
  51. * @param string $url
  52. * URL
  53. * @param int $page
  54. * 当前页
  55. * @return string
  56. */
  57. private static function pager_html($page_num, $url, $page, $default_style)
  58. {
  59. list ($start, $end) = self::get_satrt_and_end($page, $page_num);
  60. list ($back, $next) = self::get_pager_next_back_html($url, $page, $page_num);
  61. list ($first, $last) = self::get_first_last_html($page_num, $url);
  62. if ($default_style == true) {
  63. $html = self::$style_config . "<div class='InitPHP_pages'>";
  64. } else {
  65. $html = "<div class='InitPHP_pages'>";
  66. }
  67. $html .= $back;
  68. $html .= $first;
  69. $html .= self::get_pager_num_html($start, $end, $url, $page);
  70. $html .= $last;
  71. $html .= $next;
  72. $html .= self::get_total_num_html($page_num);
  73. $html .= self::get_select_html($page_num, $url, $page);
  74. $html .= '</div>';
  75. return $html;
  76. }
  77. /**
  78. * 分页-获取分页数字的列表
  79. *
  80. * @param int $start
  81. * 开始数
  82. * @param int $end
  83. * 结束数
  84. * @param string $url
  85. * URL地址
  86. * @param int $page
  87. * 当前页
  88. * @return string
  89. */
  90. private static function get_pager_num_html($start, $end, $url, $page)
  91. {
  92. if (self::$conf['page_num'] == 0)
  93. return ''; // 是否开启
  94. $html = '';
  95. for ($i = $start; $i <= $end; $i ++) {
  96. if ($i == $page) {
  97. $html .= "<strong>{$i}</strong>";
  98. } else {
  99. $html .= "<a href='javascript:void(0);' turn-url='{$url}&page={$i}' onclick='go_to(this);'>{$i}</a>";
  100. }
  101. }
  102. return $html;
  103. }
  104. /**
  105. * 分页-分页总页数显示
  106. *
  107. * @param int $page_num
  108. * 页数
  109. * @return string
  110. */
  111. private static function get_total_num_html($page_num)
  112. {
  113. if (self::$conf['total_num'] == 0)
  114. return ''; // 是否开启
  115. return "&nbsp;&nbsp;共{$page_num}页";
  116. }
  117. /**
  118. * 分页-分页首页和尾页显示
  119. *
  120. * @param int $page_num
  121. * 页数
  122. * @param string $url
  123. * URL地址
  124. * @return string
  125. */
  126. private static function get_first_last_html($page_num, $url)
  127. {
  128. if (self::$conf['first_last'] == 0)
  129. return array(
  130. '',
  131. ''
  132. ); // 是否开启
  133. $first = "<a href='javascript:void(0);' turn-url='{$url}&page=1' onclick='go_to(this);' class='first'>首页</a>";
  134. $last = "<a href='javascript:void(0);' turn-url='{$url}&page={$page_num}' onclick='go_to(this);' class='last'>尾页</a>";
  135. return array(
  136. $first,
  137. $last
  138. );
  139. }
  140. /**
  141. * 分页-获取分页上一页-下一页HTML
  142. *
  143. * @param string $url
  144. * URL地址
  145. * @param int $page
  146. * 当前页
  147. * @param int $page_num
  148. * 页数
  149. * @return string
  150. */
  151. private static function get_pager_next_back_html($url, $page, $page_num)
  152. {
  153. if (self::$conf['back_next'] == 0)
  154. return array(
  155. '',
  156. ''
  157. ); // 是否开启
  158. $next_page = $page + 1;
  159. $next = "<a href='javascript:void(0);' turn-url='{$url}&page={$next_page}' onclick='go_to(this);' class='next'>下一页</a>";
  160. if ($page == $page_num)
  161. $next = '';
  162. $back_page = $page - 1;
  163. $back = "<a href='javascript:void(0);' turn-url='{$url}&page={$back_page}' onclick='go_to(this);' class='back'>上一页</a>";
  164. if ($page == 1)
  165. $back = '';
  166. return array(
  167. $back,
  168. $next
  169. );
  170. }
  171. /**
  172. * 分页-Select选择器
  173. *
  174. * @param int $page_num
  175. * 页数
  176. * @param string $url
  177. * URL地址
  178. * @param int $page
  179. * 当前页
  180. * @return string
  181. */
  182. private static function get_select_html($page_num, $url, $page)
  183. {
  184. if (self::$conf['select'] == 0)
  185. return '';
  186. $html = '&nbsp;&nbsp;<select name="select" onchange="javascript:window.location.href=this.options[this.selectedIndex].value">';
  187. for ($i = 1; $i <= $page_num; $i ++) {
  188. if ($page == $i) {
  189. $selected = ' selected';
  190. } else {
  191. $selected = '';
  192. }
  193. $html .= "<option value='{$url}&page={$i}' {$selected}>{$i}</option>";
  194. }
  195. $html .= '</select>';
  196. return $html;
  197. }
  198. /**
  199. * 分页-获取分页显示数字
  200. *
  201. * @param int $page
  202. * 当前页
  203. * @param int $page_num
  204. * 页数
  205. * @return array(start, end)
  206. */
  207. private static function get_satrt_and_end($page, $page_num)
  208. {
  209. $temp = floor(self::$show_num / 2);
  210. if ($page_num < self::$show_num)
  211. return array(
  212. 1,
  213. $page_num
  214. );
  215. if ($page <= $temp) {
  216. $start = 1;
  217. $end = self::$show_num;
  218. } elseif (($page_num - $temp) < $page) {
  219. $start = $page_num - self::$show_num + 1;
  220. $end = $page_num;
  221. } else {
  222. $start = $page - $temp;
  223. $end = $page - $temp + self::$show_num - 1;
  224. }
  225. return array(
  226. $start,
  227. $end
  228. );
  229. }
  230. }