Guest User

Untitled

a guest
May 24th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.08 KB | None | 0 0
  1. <?php
  2.  
  3. class Paginator {
  4. public $count, $limit, $page, $totalpages, $offset;
  5.  
  6. function __construct($count, $limit, $page = 1) {
  7. $totalpages = ceil($count/$limit);
  8.  
  9. if (!isset($page) or empty($page) or !is_numeric($page)) {
  10. $page = 1;
  11. } elseif ($page < 1) {
  12. $page = 1;
  13. } elseif ($page > $totalpages) {
  14. $page = $totalpages;
  15. }
  16.  
  17. $offset = ($limit * ($page - 1));
  18.  
  19. $this->count = $count;
  20. $this->limit = $limit;
  21. $this->page = $page;
  22. $this->totalpages = $totalpages;
  23. $this->offset = $offset;
  24. }
  25.  
  26. function rounder($num) {
  27. if (is_numeric($num) && $num < 1) {
  28. return 1;
  29. } else {
  30. return $num;
  31. }
  32. }
  33.  
  34. function get_before() {
  35. $rempages = $this->totalpages - $this->page;
  36. $magic = $this->rounder($this->totalpages - 4);
  37. $before = array();
  38.  
  39. switch ($this->page) {
  40. case 1:
  41. return $before;
  42. break;
  43.  
  44. case 2:
  45. $before['Prev'] = $this->page - 1;
  46. $before[1] = 1;
  47. return $before;
  48. break;
  49.  
  50. case 3:
  51. $before['First'] = 1;
  52. $before['Prev'] = $this->page - 1;
  53. $before[1] = 1;
  54. $before[2] = 2;
  55. return $before;
  56. break;
  57.  
  58. case ($this->page > 3):
  59. $before['First'] = 1;
  60. $before['Prev'] = $this->page - 1;
  61. if ($rempages > 1) {
  62. $before[$this->page - 2] = $this->page - 2;
  63. $before[$this->page - 1] = $this->page - 1;
  64. return $before;
  65. break;
  66. } elseif ($rempages == 1) {
  67. for ($i=$magic; $i < ($this->totalpages - 1); $i++) {
  68. $before[$i] = $i;
  69. }
  70. return $before;
  71. break;
  72. } elseif ($rempages == 0) {
  73. for ($i=$magic; $i < $this->totalpages; $i++) {
  74. $before[$i] = $i;
  75. }
  76. return $before;
  77. break;
  78. }
  79. }
  80. }
  81.  
  82. function get_after() {
  83. $rempages = $this->totalpages - $this->page;
  84. $after = array();
  85.  
  86. switch ($rempages) {
  87. case 0:
  88. return $after;
  89. break;
  90.  
  91. case 1:
  92. $after[$this->page + 1] = $this->page + 1;
  93. $after['Next'] = $this->page + 1;
  94. return $after;
  95. break;
  96.  
  97. case 2:
  98. $after[$this->page + 1] = $this->page + 1;
  99. $after[$this->page + 2] = $this->page + 2;
  100. $after['Next'] = $this->page + 1;
  101. $after['Last'] = $this->totalpages;
  102. return $after;
  103. break;
  104.  
  105. case 3:
  106. if ($this->page >= 3) {
  107. $after[$this->page + 1] = $this->page + 1;
  108. $after[$this->page + 2] = $this->page + 2;
  109. $after['Next'] = $this->page + 1;
  110. $after['Last'] = $this->totalpages;
  111. return $after;
  112. break;
  113. } elseif ($this->page <= 2) {
  114. $after[$this->page + 1] = $this->page + 1;
  115. $after[$this->page + 2] = $this->page + 2;
  116. $after[$this->page + 3] = $this->page + 3;
  117. $after['Next'] = $this->page + 1;
  118. $after['Last'] = $this->totalpages;
  119. return $after;
  120. break;
  121. }
  122.  
  123. case ($rempages >= 4):
  124. if ($this->page >= 3) {
  125. $after[$this->page + 1] = $this->page + 1;
  126. $after[$this->page + 2] = $this->page + 2;
  127. $after['Next'] = $this->page + 1;
  128. $after['Last'] = $this->totalpages;
  129. return $after;
  130. break;
  131. } elseif ($this->page <= 2) {
  132. $after[$this->page + 1] = $this->page + 1;
  133. $after[$this->page + 2] = $this->page + 2;
  134. $after[$this->page + 3] = $this->page + 3;
  135. $after[$this->page + 4] = $this->page + 4;
  136. $after['Next'] = $this->page + 1;
  137. $after['Last'] = $this->totalpages;
  138. return $after;
  139. break;
  140. }
  141. }
  142. }
  143.  
  144. function get_pages_array() {
  145. return ($this->get_before() + array($this->page => $this->page) + $this->get_after());
  146. }
  147.  
  148. function get_pages_html($script = null) {
  149. $pages_array = $this->get_pages_array();
  150.  
  151. if (!$pages_array) {
  152. return;
  153. }
  154.  
  155. if (count($pages_array) === 1) {
  156. return;
  157. }
  158.  
  159. $html = '';
  160. foreach ($pages_array as $k => $v) {
  161. if ($k == 'First' or $k == 'Last' or $k == 'Next' or $k == 'Prev') {
  162. $html .= sprintf('<a href="%s?page=%d"><b>%s</b></a> ', $script, $v, $k);
  163. } elseif ($k == $this->page) {
  164. $html .= sprintf('<b>%d</b> ', $k);
  165. } else {
  166. $html .= sprintf('<a href="%s?page=%d">%d</a> ', $script, $v, $k);
  167. }
  168. }
  169. return $html;
  170. }
  171. }
  172.  
  173. ?>
Add Comment
Please, Sign In to add comment