class.pager.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <?php
  2. class Pager {
  3. public $each_disNums; //每页显示的条目数
  4. public $nums; //总条目数
  5. public $current_page; //当前被选中的页
  6. public $sub_pages; //每次显示的页数
  7. public $pageNums; //总页数
  8. public $page_array = array(); //用来构造分页的数组
  9. public $subPage_link; //每个分页的链接
  10. public $langs = array(); // 语言包
  11. /**
  12. *
  13. * __construct是SubPages的构造函数,用来在创建类的时候自动运行.
  14. * @$each_disNums 每页显示的条目数
  15. * @nums 总条目数
  16. * @current_num 当前被选中的页
  17. * @sub_pages 每次显示的页数
  18. * @subPage_link 每个分页的链接
  19. * @subPage_type 显示分页的类型
  20. *
  21. * 当@subPage_type=1的时候为普通分页模式
  22. * example: 共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]
  23. * 当@subPage_type=2的时候为经典分页样式
  24. * example: 当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
  25. */
  26. function __construct() {
  27. // $this->each_disNums = intval($each_disNums);
  28. // $this->nums = intval($nums);
  29. // if (!$current_page) {
  30. // $this->current_page = 1;
  31. // } else {
  32. // $this->current_page = intval($current_page);
  33. // }
  34. // $this->sub_pages = intval($sub_pages);
  35. // $this->pageNums = ceil($nums / $each_disNums);
  36. // $this->subPage_link = "?page=";
  37. $this->each_disNums = 20;
  38. $this->subPage_type = 2;
  39. $this->sub_pages = 10;
  40. }
  41. public function init($argv = array()) {
  42. isset($argv['each_disNums']) && $this->each_disNums = (int)$argv['each_disNums'];
  43. isset($argv['nums']) && $this->nums = (int)$argv['nums'];
  44. isset($argv['current_page']) && $this->current_page = (int)$argv['current_page'];
  45. isset($argv['sub_pages']) && $this->sub_pages = (int)$argv['sub_pages'];
  46. isset($argv['subPage_link']) && $this->subPage_link = $argv['subPage_link'];
  47. !isset($argv['lang']) && $argv['lang'] = 'zh';
  48. $this->langs = $this->getLangs($argv['lang']);
  49. if (!$this->current_page) {
  50. $this->current_page = 1;
  51. }
  52. // $this->pageNums = ceil($this->nums / $this->each_disNums);
  53. }
  54. /*
  55. 用来给建立分页的数组初始化的函数。
  56. */
  57. function initArray() {
  58. for ($i = 0; $i < $this->sub_pages; $i++) {
  59. $this->page_array[$i] = $i;
  60. }
  61. return $this->page_array;
  62. }
  63. /*
  64. construct_num_Page该函数使用来构造显示的条目
  65. 即使:[1][2][3][4][5][6][7][8][9][10]
  66. */
  67. function construct_num_Page() {
  68. if ($this->pageNums < $this->sub_pages) {
  69. $current_array = array();
  70. for ($i = 0; $i < $this->pageNums; $i++) {
  71. $current_array[$i] = $i + 1;
  72. }
  73. } else {
  74. $current_array = $this->initArray();
  75. if ($this->current_page <= 3) {
  76. for ($i = 0; $i < count($current_array); $i++) {
  77. $current_array[$i] = $i + 1;
  78. }
  79. } elseif ($this->current_page <= $this->pageNums && $this->current_page > $this->pageNums - $this->sub_pages + 1) {
  80. for ($i = 0; $i < count($current_array); $i++) {
  81. $current_array[$i] = ($this->pageNums) - ($this->sub_pages) + 1 + $i;
  82. }
  83. } else {
  84. for ($i = 0; $i < count($current_array); $i++) {
  85. $current_array[$i] = $this->current_page - 2 + $i;
  86. }
  87. }
  88. }
  89. return $current_array;
  90. }
  91. /**
  92. * @$each_disNums 每页显示的条目数
  93. * @nums 总条目数
  94. * @current_num 当前被选中的页
  95. * @sub_pages 每次显示的页数
  96. * @subPage_link 每个分页的链接
  97. * @subPage_type 显示分页的类型
  98. *
  99. * 当@subPage_type=1的时候为普通分页模式
  100. * example: 共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]
  101. * 当@subPage_type=2的时候为经典分页样式
  102. * example: 当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
  103. */
  104. public function show($current_page, $nums, $subPage_link = '?page=') {
  105. $this->nums = intval($nums);
  106. if (!$current_page) {
  107. $this->current_page = 1;
  108. } else {
  109. $this->current_page = intval($current_page);
  110. }
  111. $this->pageNums = ceil($nums / $this->each_disNums);
  112. $this->subPage_link = $subPage_link;
  113. $subPageCss2Str = "";
  114. // $subPageCss2Str .= "<li class='disabled'><span>当前第" . $this->current_page . "/" . $this->pageNums . "页</span></li>";
  115. $subPageCss2Str .= sprintf($this->langs['pinfo'], $this->current_page, $this->pageNums);
  116. if ($this->current_page > 1) {
  117. $firstPageUrl = $this->subPage_link . "1";
  118. $prewPageUrl = $this->subPage_link . ($this->current_page - 1);
  119. // $subPageCss2Str .= "<li><a href='$firstPageUrl'>首页</a></li>";
  120. // $subPageCss2Str .= "<li><a href='$prewPageUrl'>上一页</a></li>";
  121. $subPageCss2Str .= sprintf($this->langs['firstPageLink'], $firstPageUrl);
  122. $subPageCss2Str .= sprintf($this->langs['prevPageLink'], $prewPageUrl);
  123. } else {
  124. // $subPageCss2Str .= "<li class='disabled'><span>首页</span></li>";
  125. // $subPageCss2Str .= "<li class='disabled'><span>上一页</span></li>";
  126. $subPageCss2Str .= $this->langs['firstPageDisabled'];
  127. $subPageCss2Str .= $this->langs['prevPageDisabled'];
  128. }
  129. $a = $this->construct_num_Page();
  130. for ($i = 0; $i < count($a); $i++) {
  131. $s = $a[$i];
  132. if ($s == $this->current_page) {
  133. // $subPageCss2Str .= "<li class='active'><span>" . $s . "</span></li>";
  134. $subPageCss2Str .= sprintf($this->langs['active'], $s);
  135. } else {
  136. $url = $this->subPage_link . $s;
  137. // $subPageCss2Str .= "<li><a href='$url'>" . $s . "</a></li>";
  138. $subPageCss2Str .= sprintf($this->langs['numLink'], $url, $s);
  139. }
  140. }
  141. if ($this->current_page < $this->pageNums) {
  142. $lastPageUrl = $this->subPage_link . $this->pageNums;
  143. $nextPageUrl = $this->subPage_link . ($this->current_page + 1);
  144. $subPageCss2Str .= sprintf($this->langs['nextPageLink'], $nextPageUrl);
  145. $subPageCss2Str .= sprintf($this->langs['lastPageLink'], $lastPageUrl);
  146. } else {
  147. $subPageCss2Str .= $this->langs['nextPageDisabled'];
  148. $subPageCss2Str .= $this->langs['lastPageDisabled'];
  149. }
  150. return $subPageCss2Str;
  151. }
  152. /**
  153. * 语言包
  154. * @param string $langtype
  155. * @return array
  156. */
  157. public function getLangs($langtype = 'zh') {
  158. $lang = array();
  159. $lang['zh'] = array(
  160. 'pinfo' => "<li class='disabled'><span>当前第%s/%s页</span></li>",
  161. 'firstPageLink' => "<li><a href='%s'>首页</a></li>",
  162. 'prevPageLink' => "<li><a href='%s'>上一页</a></li>",
  163. 'firstPageDisabled' => "<li class='disabled'><span>首页</span></li>",
  164. 'prevPageDisabled' => "<li class='disabled'><span>上一页</span></li>",
  165. 'active' => "<li class='active'><span>%s</span></li>",
  166. 'numLink' => "<li><a href='%s'>%s</a></li>",
  167. 'nextPageLink' => " <li><a href='%s'>下一页</a></li>",
  168. 'lastPageLink' => "<li><a href='%s'>尾页</a></li>",
  169. 'nextPageDisabled' => "<li class='disabled'><span>下一页</span></li>",
  170. 'lastPageDisabled' => "<li class='disabled'><span>尾页</span></li>",
  171. );
  172. $lang['en'] = array(
  173. 'pinfo' => "<li class='disabled'><span>Page %s/%s</span></li>",
  174. 'firstPageLink' => "<li><a href='%s'>First</a></li>",
  175. 'prevPageLink' => "<li><a href='%s'>Prev</a></li>",
  176. 'firstPageDisabled' => "<li class='disabled'><span>First</span></li>",
  177. 'prevPageDisabled' => "<li class='disabled'><span>Prev</span></li>",
  178. 'active' => "<li class='active'><span>%s</span></li>",
  179. 'numLink' => "<li><a href='%s'>%s</a></li>",
  180. 'nextPageLink' => " <li><a href='%s'>Next</a></li>",
  181. 'lastPageLink' => "<li><a href='%s'>Last</a></li>",
  182. 'nextPageDisabled' => "<li class='disabled'><span>Next</span></li>",
  183. 'lastPageDisabled' => "<li class='disabled'><span>Last</span></li>",
  184. );
  185. return isset($lang[$langtype]) ? $lang[$langtype] : $lang['en'];
  186. }
  187. /**
  188. * 生成查询链接
  189. * @param string $base
  190. * @param array $param
  191. * @return string
  192. */
  193. public function buildUrl($base, $param = array()) {
  194. return $base . '?' . http_build_query($param) . '&page=';
  195. }
  196. }