helper_page.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: helper_page.php 33588 2013-07-12 06:34:56Z hypowang $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. class helper_page {
  12. public static function multi($num, $perpage, $curpage, $mpurl, $maxpages = 0, $page = 10, $autogoto = FALSE, $simple = FALSE, $jsfunc = FALSE) {
  13. global $_G;
  14. $ajaxtarget = !empty($_GET['ajaxtarget']) ? " ajaxtarget=\"".dhtmlspecialchars($_GET['ajaxtarget'])."\" " : '';
  15. $a_name = '';
  16. $mpurl = str_replace(array("'", '"', "\\"), array('%27', '%22', '%5c'), $mpurl);
  17. if(strpos($mpurl, '#') !== FALSE) {
  18. $a_strs = explode('#', $mpurl);
  19. $mpurl = $a_strs[0];
  20. $a_name = '#'.$a_strs[1];
  21. }
  22. if($jsfunc !== FALSE) {
  23. $mpurl = 'javascript:'.$mpurl;
  24. $a_name = $jsfunc;
  25. $pagevar = '';
  26. } else {
  27. $pagevar = 'page=';
  28. }
  29. if(defined('IN_ADMINCP')) {
  30. $shownum = $showkbd = TRUE;
  31. $showpagejump = FALSE;
  32. $lang['prev'] = '&lsaquo;&lsaquo;';
  33. $lang['next'] = '&rsaquo;&rsaquo;';
  34. } else {
  35. $shownum = $showkbd = FALSE;
  36. $showpagejump = TRUE;
  37. if(defined('IN_MOBILE') && !defined('TPL_DEFAULT')) {
  38. $lang['prev'] = lang('core', 'prevpage');
  39. $lang['next'] = lang('core', 'nextpage');
  40. } else {
  41. $lang['prev'] = '&nbsp;&nbsp;';
  42. $lang['next'] = lang('core', 'nextpage');
  43. }
  44. $lang['pageunit'] = lang('core', 'pageunit');
  45. $lang['total'] = lang('core', 'total');
  46. $lang['pagejumptip'] = lang('core', 'pagejumptip');
  47. }
  48. if(defined('IN_MOBILE') && !defined('TPL_DEFAULT')) {
  49. $dot = '..';
  50. $page = intval($page) < 10 && intval($page) > 0 ? $page : 4 ;
  51. } else {
  52. $dot = '...';
  53. }
  54. $multipage = '';
  55. if($jsfunc === FALSE) {
  56. $mpurl .= strpos($mpurl, '?') !== FALSE ? '&amp;' : '?';
  57. }
  58. $realpages = 1;
  59. $_G['page_next'] = 0;
  60. $page -= strlen($curpage) - 1;
  61. if($page <= 0) {
  62. $page = 1;
  63. }
  64. if($num > $perpage) {
  65. $offset = floor($page * 0.5);
  66. $realpages = @ceil($num / $perpage);
  67. $curpage = $curpage > $realpages ? $realpages : $curpage;
  68. $pages = $maxpages && $maxpages < $realpages ? $maxpages : $realpages;
  69. if($page > $pages) {
  70. $from = 1;
  71. $to = $pages;
  72. } else {
  73. $from = $curpage - $offset;
  74. $to = $from + $page - 1;
  75. if($from < 1) {
  76. $to = $curpage + 1 - $from;
  77. $from = 1;
  78. if($to - $from < $page) {
  79. $to = $page;
  80. }
  81. } elseif($to > $pages) {
  82. $from = $pages - $page + 1;
  83. $to = $pages;
  84. }
  85. }
  86. $_G['page_next'] = $to;
  87. $multipage = ($curpage - $offset > 1 && $pages > $page ? '<a href="'.(self::mpurl($mpurl, $pagevar, 1)).$a_name.'" class="first"'.$ajaxtarget.'>1 '.$dot.'</a>' : '').
  88. ($curpage > 1 && !$simple ? '<a href="'.(self::mpurl($mpurl, $pagevar, $curpage - 1)).$a_name.'" class="prev"'.$ajaxtarget.'>'.$lang['prev'].'</a>' : '');
  89. for($i = $from; $i <= $to; $i++) {
  90. $multipage .= $i == $curpage ? '<strong>'.$i.'</strong>' :
  91. '<a href="'.(self::mpurl($mpurl, $pagevar, $i)).($ajaxtarget && $i == $pages && $autogoto ? '#' : $a_name).'"'.$ajaxtarget.'>'.$i.'</a>';
  92. }
  93. $wml = defined('IN_MOBILE') && IN_MOBILE == 3;
  94. $jsurl = '';
  95. if(($showpagejump || $showkbd) && !$simple && !$ajaxtarget && !$wml) {
  96. $jsurl = $mpurl.(strpos($mpurl, '{page}') !== false ? '\'.replace(\'{page}\', this.value == 1 ? \'\' : this.value)': $pagevar.'\'+this.value;').'; doane(event);';
  97. }
  98. $multipage .= ($to < $pages ? '<a href="'.(self::mpurl($mpurl, $pagevar, $pages)).$a_name.'" class="last"'.$ajaxtarget.'>'.$dot.' '.$realpages.'</a>' : '').
  99. ($showpagejump && !$simple && !$ajaxtarget && !$wml ? '<label><input type="text" name="custompage" class="px" size="2" title="'.$lang['pagejumptip'].'" value="'.$curpage.'" onkeydown="if(event.keyCode==13) {window.location=\''.$jsurl.'}" /><span title="'.$lang['total'].' '.$pages.' '.$lang['pageunit'].'"> / '.$pages.' '.$lang['pageunit'].'</span></label>' : '').
  100. ($curpage < $pages && !$simple ? '<a href="'.(self::mpurl($mpurl, $pagevar, $curpage + 1)).$a_name.'" class="nxt"'.$ajaxtarget.'>'.$lang['next'].'</a>' : '').
  101. ($showkbd && !$simple && $pages > $page && !$ajaxtarget && !$wml ? '<kbd><input type="text" name="custompage" size="3" onkeydown="if(event.keyCode==13) {window.location=\''.$jsurl.'}" /></kbd>' : '');
  102. $multipage = $multipage ? '<div class="pg">'.($shownum && !$simple ? '<em>&nbsp;'.$num.'&nbsp;</em>' : '').$multipage.'</div>' : '';
  103. }
  104. $maxpage = $realpages;
  105. return $multipage;
  106. }
  107. public static function mpurl($mpurl, $pagevar, $page) {
  108. if(strpos($mpurl, '{page}') !== false) {
  109. return trim(str_replace('{page}', ($page == 1 ? '' : $page), $mpurl), '?');
  110. } else {
  111. $separator = '';
  112. if($pagevar[0] !== '&' && $pagevar[0] !== '?') {
  113. if(strpos($mpurl, '?') !== FALSE) {
  114. $separator = '';
  115. } else {
  116. $separator = '?';
  117. }
  118. }
  119. return $mpurl.$separator.$pagevar.$page;
  120. }
  121. }
  122. public static function simplepage($num, $perpage, $curpage, $mpurl) {
  123. $return = '';
  124. $lang['next'] = lang('core', 'nextpage');
  125. $lang['prev'] = lang('core', 'prevpage');
  126. $next = $num == $perpage ? '<a href="'.(self::mpurl($mpurl, '&amp;page=', $curpage + 1)).'" class="nxt">'.$lang['next'].'</a>' : '';
  127. $prev = $curpage > 1 ? '<span class="pgb"><a href="'.(self::mpurl($mpurl, '&amp;page=', $curpage - 1)).'">'.$lang['prev'].'</a></span>' : '';
  128. if($next || $prev) {
  129. $return = '<div class="pg">'.$prev.$next.'</div>';
  130. }
  131. return $return;
  132. }
  133. }
  134. ?>