blackseabreathe

Untitled

Jul 25th, 2021 (edited)
118
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?
  2.  
  3. class paggi {
  4.  
  5. protected $url;
  6.  
  7. public function __construct($data){
  8. $url = $data['url'];
  9. $this->url = $url;
  10. }
  11.  
  12. public function getItems($sql){
  13.  
  14. $limit = 6;
  15.  
  16. if(isset($_GET['page']) && !empty($_GET['page'])){
  17. $this->current_page = $pageNum = (int)$_GET['page'];
  18. }
  19. else{
  20. $this->current_page = $pageNum = 1;
  21. }
  22.  
  23. $this->page_count = $limit;
  24. $this->views_page = 5;
  25. $startWith = ($pageNum * $limit) - $limit;
  26.  
  27. // Подключение к БД
  28. $dbh = new PDO('mysql:dbname=name;host=localhost', 'user', 'pass');
  29.  
  30. // Узнаем сколько всего записей в БД
  31. if (strstr($sql, 'COUNT') === false) {
  32. $sql2 = str_replace('SELECT *', 'SELECT COUNT(*)', $sql);
  33. }
  34.  
  35. $sth = $dbh->prepare($sql2);
  36. $sth->execute();
  37. $count = $sth->fetchColumn();
  38.  
  39.  
  40. $sql = $sql .' LIMIT '.$startWith.', '.$limit;
  41. $sth = $dbh->prepare($sql);
  42. $sth->execute();
  43. $array = $sth->fetchAll(PDO::FETCH_ASSOC);
  44.  
  45.  
  46.  
  47.  
  48. $this->count = (int)$count;
  49.  
  50. $this->query_key = 'page';
  51.  
  52. $this->temps['classes']['linkpage'] = 'pageNo';
  53. $this->temps['classes']['current'] = 'active';
  54. $this->temps['classes']['start'] = 'pagination_start';
  55. $this->temps['classes']['next'] = 'pagination_next';
  56.  
  57. return $array;
  58.  
  59. }
  60.  
  61. protected function num_pages(){
  62. return ceil($this->count / $this->page_count);
  63. }
  64.  
  65. protected function pg_handler(){
  66.  
  67. $num_pages = (int)$this->num_pages();
  68. $mid_view_pages = (int)ceil($this->views_page / 2);
  69. $page_start = 0;
  70. $page_end = 0;
  71. $html = '<div class="pagination"><ul class="df fw">';
  72.  
  73. //$request_uri = parse_url($_SERVER['REQUEST_URI']);
  74. $request_uri = parse_url($this->url);
  75. $req_queries = '';
  76.  
  77. if (isset($request_uri['query']) && iconv_strlen($request_uri['query'])) {
  78. parse_str($request_uri['query'], $output);
  79.  
  80. if (array_key_exists($this->query_key, $output)) unset($output[$this->query_key]);
  81.  
  82. $req_queries = http_build_query($output);
  83. }
  84.  
  85. $this->route = (iconv_strlen($req_queries)) ? $request_uri['path'].'?'.$req_queries.'&' : $request_uri['path'].'?';
  86.  
  87. // Проверяем существует ли более чем одной страницы
  88. if ($num_pages > 1) {
  89. // Проверяем больше ли кол-во страниц, указанной видимой
  90. if ($num_pages > $this->views_page) {
  91. // Проверяем если текущея страница в необласти видимости
  92. if ($this->current_page > $mid_view_pages) {
  93. $page_start = $this->current_page - 2; // Начинаем нумерация с небольшим смещением от текущей страницы
  94.  
  95. // Проверяем если конец нумерации меньше области видимости, то увеличваем нумерация (также смещая)
  96. $page_end = ($page_end < $num_pages && (($this->current_page + 2) < $num_pages)) ? $this->current_page + 2 : $num_pages;
  97.  
  98. $html .= '<li class="'.$this->temps['classes']['start'].'"><a href="'.$this->route.$this->query_key.'=1">1</a><li>';
  99. } else {
  100. $page_end = $this->views_page; // Конец нумерации приравниваем к области видимости
  101. $page_start = 1; // начинаем нумерцию с 1 страницы
  102. }
  103. } else {
  104. $page_start = 1;
  105. $page_end = $num_pages;
  106. }
  107.  
  108. for ($i = $page_start; $i <= $page_end; $i++) {
  109. $html .= '<li class="'.$this->temps['classes']['linkpage'].(($i === $this->current_page) ? ' '.$this->temps['classes']['current']: '').'"><a href="'.$this->route.$this->query_key.'='.$i.'">'.$i.'</a></li>';
  110. }
  111.  
  112. if ($num_pages !== $page_end && $num_pages > $this->views_page) {
  113. if ($this->current_page < $num_pages) $next = $this->current_page + 1;
  114.  
  115. $html .= '<li class="'.$this->temps['classes']['next'].'"><a href="'.$this->route.$this->query_key.'='.$next.'">&rarr;</a></li>';
  116. }
  117. }
  118.  
  119. $html .= '</ul></div>';
  120.  
  121. return $html;
  122. }
  123.  
  124. public function pg_print(){
  125. echo $this->pg_handler();
  126. }
  127.  
  128. public function pg_return(){
  129. return $this->pg_handler();
  130. }
  131.  
  132.  
  133.  
  134.  
  135. }
  136.  
RAW Paste Data