@VladyaKun1210

Как грамотно реализовать пагинацию через класс?

Требуется создать пагинацию на сайте. Как грамотно можно реализовать пагинацию через класс?

class Paginate extends Connection{
                            public function paginateionSelect($page, $total_page){
                                $sql = "SELECT * FROM `clients`";
                                $result = mysqli_query($this->con, $sql);
                                $total_records = mysqli_num_rows($result);
                                $records_per_page = 5;
                                $total_page = ceil($total_records / $records_per_page);

                                if(!isset($_GET['page'])){
                                    $page = 1;
                                }
                                else{
                                    $page = $_GET['page'];
                                }
                                return $total_page;
                            }
                            
                            public function paginationLimit($result1){
                                $start = ($page - 1) * $records_per_page;
                                $sql1 = "SELECT * FROM `clients` LIMIT $start, $records_per_page";
                                $result1 = mysqli_query($this->con, $sql1);
                                return $result1;
                            }
                        }
                        
                        
                        $pagin = new Paginate();



<?php 
          for($page = 1; $page <= $total_page; $page++){
               ?>
          <li class="page-item"><a lass="page-link" href="clients.php?page=<?php echo $page ?>"><?php echo $page ?></a></li>
 <?php
 }
?>
  • Вопрос задан
  • 251 просмотр
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Еще раз: Тут нет никакого ооп, у вас получается какой-то процедурный код, засунутый внутрь класса. Это к ооп не имеет никакого отношения. Не пытайтесь сделать деревянную печку, ничего хорошего не получится.
У вас:
Код реализует (такой себе) пэйджинг для одного конкретного запроса (нахрена такой пейджинг засовывать в класс?)
Код ничего не инкапсулирует, тупо выполняется как функция. По сути если мы уберем class Paginate extends Connection{ то ничего не поменяется.
Внутри методов используются глобальные переменные (GET), что само по себе уже лютый говнокод.
Много слов про солид и прочие вещи из ооп не пишу, в виду полного их отсутствия в коде, да и смысл?

По этому решения для вашего случая в контексте ооп просто нет, так как:
Пэйджинг работает с моделями на основе ОРМ, в пэйджинг в качестве аргумента передается модель, и далее уже пэйджинг работает с моделью, используя ее методы работы с хранилищем, а не просто тупо фигачит запросы. У вас моделей просто нет.
Модели подразумевают конкретный интерфейс, который позволяет работать с пэйджингом адекватно. Ну и моделей нет ))
Точкой взаимодействия между моделью и пэйджингом будет контроллер, про который тут вообще у вас никто не в курсе.
Вывод (view) никогда не пересекается с кодом логики, в него просто передаются готовые данные, после чего они вставляются в нужные точки шаблона.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы