Просмотр файла system/inc/classes/navigation.class.php

Размер файла: 8.01Kb
  1. <?
  2. class Navigation
  3. {
  4. public function __construct($input,$on_page,$print_str = false, $order = 'asc',$link = '?')
  5. {
  6. if(is_array($input))
  7. {
  8.  
  9. $this->rfile=array_values($input);
  10. $this->all_files = count($this->rfile);
  11. $this->rfile = $order == 'asc' ? $this->rfile : array_reverse($this->rfile);
  12. $this->type_result = 'Файлов';
  13. }
  14. else
  15. {
  16. $this->all_files = $input;
  17. $this->type_result = 'Записей';
  18. }
  19. $this->link = $link;
  20. $this->on_page = $on_page < 1 ? 1 : $on_page;
  21. $this->str = $print_str === true ? ' ' : '';
  22. $this->order = $order;
  23. // всего страниц
  24. $this->all_pages = ceil($this->all_files / $this->on_page);
  25. $this->page = !isset($_GET['p']) || $_GET['p'] <= 0 ? 1 : abs(intval($_GET['p']));
  26. $this->page = $this->page > $this->all_pages ? $this->all_pages : $this->page;
  27. $this->page = isset($_GET['last']) ? $this->all_pages : $this->page;
  28. $this->start = ($this->page * $this->on_page) - 1;
  29. $this->start = $this->start > $this->all_files ? $this->all_files : $this->start;
  30. // начальное число массива
  31. $this->end = ($this->page * $this->on_page)- $this->on_page;
  32. // последние 3 страницы
  33. $this->last_three_page = $this->all_pages - 2;
  34. // "стрелочки" возле ссылок Вперед/Назад
  35. $this->lt = '&#8592; '; // Назад
  36. $this->gt = ' &#8594;'; // Вперед
  37. }
  38. /**
  39. * вывод списка страниц
  40. */
  41. public function pagination($navigat = "") {
  42. $string_pages = $this->str;
  43. if($this->all_pages > 10)
  44. {
  45. if($this->page <= 3)
  46. {
  47. for($i=1;$i<=3;$i++)
  48. {
  49. $string_pages .= $this->page == $i ? ' '.$i.' ' : '<a class="navigation" href="'.$this->link.''.$navigat.'&amp;p='.$i.'">'.$i.'</a> ';
  50. }
  51. if($this->page == 3)
  52. {
  53. $string_pages .= ' <a class="navigation" href="'.$this->link.'&amp;p=4">4</a> ';
  54. }
  55. $string_pages .= '...';
  56. for($i = $this->last_three_page;$i<=$this->all_pages;$i++)
  57. {
  58. $string_pages .= $this->page == $i ? ' <span class="navigation">'.$i.'</span> ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;p='.$i.'">'.$i.'</a> ';
  59. }
  60. }
  61. elseif($this->page < 6 && $this->page <= $this->last_three_page)
  62. {
  63. // выводим первые три ссылки
  64. for($i=1;$i<=6;$i++)
  65. {
  66. $string_pages .= $this->page == $i ? ' <span class="navigation">'.$i.'</span> ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;p='.$i.'">'.$i.'</a> ';
  67. }
  68. // и последние 3 ссылки, через троеточие
  69. $string_pages .= '...';
  70. for($i = $this->last_three_page;$i<=$this->all_pages;$i++)
  71. {
  72. $string_pages .= $this->page == $i ? ' <span class="navigation">'.$i.'</span> ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;p='.$i.'">'.$i.'</a> ';
  73. }
  74. }
  75. // если выбранная страница >= 6
  76. elseif($this->page >= 6 && $this->page <= ($this->last_three_page - 2))
  77. {
  78. // выводим первые три ссылки
  79. for($i=1;$i<=3;$i++)
  80. {
  81. $string_pages .= $this->page == $i ? ' <span class="navigation">'.$i.'</span> ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;p='.$i.'">'.$i.'</a> ';
  82. }
  83. $string_pages .= '...';
  84. // одна ссылка слева/ неактивная посредине / ссылка справа
  85. $string_pages .= ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;p='.($this->page - 1).'">'.($this->page - 1).'</a> ';
  86. $string_pages .= ' '.$this->page.' ';
  87. $string_pages .= ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;p='.($this->page + 1).'">'.($this->page + 1).'</a> ';
  88. // и последние 3 ссылки, через троеточие
  89. $string_pages .= '...';
  90. for($i = ($this->last_three_page);$i<=$this->all_pages;$i++)
  91. {
  92. $string_pages .= $this->page == $i ? ' <span class="navigation">'.$i.'</span> ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;p='.$i.'">'.$i.'</a> ';
  93. }
  94. }
  95. elseif(($this->page + 1) >= ($this->last_three_page))
  96. {
  97. for($i=1;$i<=3;$i++)
  98. {
  99. $string_pages .= $this->page == $i ? ' <span class="navigation">'.$i.'</span> ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;p='.$i.'">'.$i.'</a> ';
  100. }
  101. $string_pages .= '...';
  102. for($i = ($this->last_three_page - 3);$i<=$this->all_pages;$i++)
  103. {
  104. $string_pages .= $this->page == $i ? ' <span class="navigation">'.$i.'</span> ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;p='.$i.'">'.$i.'</a> ';
  105. }
  106. }
  107. }
  108. else
  109. {
  110. // вывод всех ссылок, если ссылок <= 10
  111. for($i=1;$i<=$this->all_pages;$i++)
  112. {
  113. $string_pages .= $this->page == $i ? ' <span class="navigation">'.$i.'</span> ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;p='.$i.'">'.$i.'</a> ';
  114. }
  115. }
  116. return $string_pages;
  117. }
  118.  
  119.  
  120.  
  121.  
  122. /*
  123. * результирующий массив файлов
  124. */
  125. public function result_files() {
  126. $this->arr = array();
  127. for($i=$this->end;$i<=$this->start;$i++)
  128. {
  129. if(isset($this->rfile[$i]))
  130. {
  131. $this->arr[$i] = $this->rfile[$i];
  132. }
  133. }
  134. return $this->arr;
  135. }
  136. /*
  137. * выводим сколько всего файлов
  138. */
  139.  
  140. public function show_info($vsego = false) {
  141. $res = $vsego != false ? $vsego : $this->type_result;
  142. return $res.': '.$this->all_files;
  143. }
  144.  
  145. /*
  146. * функция вывода линков вида - Назад | Вперед
  147. */
  148.  
  149. public function back_forward_links($razdelitel = ' | ' , $poradok = true) {
  150. if($poradok === true)
  151. {
  152. if($this->page <= 1)
  153. {
  154. $this->this_links = '<a href="'.$this->link.'&amp;p='.($this->page+1).'">Вперед'.$this->gt.'</a>';
  155. }
  156. elseif($this->page >= $this->all_pages)
  157. {
  158. $this->this_links = '<a href="'.$this->link.'&amp;p='.($this->page-1).'">'.$this->lt.'Назад</a>';
  159. }
  160. else
  161. {
  162. $this->this_links = '<a href="'.$this->link.'&amp;p='.($this->page-1).'">'.$this->lt.'Назад</a>'.$razdelitel.'<a href="'.$this->link.'&amp;p='.($this->page+1).'">Вперед'.$this->gt.'</a>';
  163. }
  164. }
  165. else
  166. {
  167. if($this->page <= 1)
  168. {
  169. $this->this_links = '<a href="'.$this->link.'&amp;p='.($this->page+1).'">Назад'.$this->gt.'</a>';
  170. }
  171. elseif($this->page >= $this->all_pages)
  172. {
  173. $this->this_links = '<a href="'.$this->link.'&amp;p='.($this->page-1).'">'.$this->lt.'Вперед</a>';
  174. }
  175. else
  176. {
  177. $this->this_links = '<a href="'.$this->link.'&amp;p='.($this->page-1).'">'.$this->lt.'Вперед</a>'.$razdelitel.'<a href="'.$this->link.'&amp;p='.($this->page+1).'">Назад'.$this->gt.'</a>';
  178. }
  179. }
  180. return $this->this_links;
  181. }
  182. /*
  183. * Лимит выводящих записей
  184. */
  185.  
  186. function limit() {
  187. return 'limit '.(($this->page*$this->on_page)-$this->on_page).' ,'.$this->on_page." ;";
  188. }
  189.  
  190. }
  191. ?>