anton_reut
@anton_reut
Начинающий веб-разработчик

Класс Пагинатор, что еще должен уметь?

Написал простенький класс Пагинатор для (как ни странно) пагинации при выводе большого списка элементов (статьи, объявления и прочее), какой еще функционал можно ему добавить кроме вывода списка ссылок? Или всё таки "один класс - одно действие"?

<?php

include 'db/db.php';

// Функции которые выполняет Пагинатор:
// - Определяет общее количество элементов каталога в выборке.
// - Определяет сколько элементов на странице каталога выводить.
// - Передает кол-во элементов на странице каталога (число) в запросы в БД при выводе списка статей и в Вычислитель количества страниц.
// - Вычисляет количество страниц каталога (и ссылок на них): общее кол-во элементов разделить на кол-во элементов на одной странице.

class Paginator {
	public $totalElementsCount;
	public $ElementsPerPage;
	
	public function __construct($pdo, $ElementsPerPage = 3){
		$sql = "SELECT * FROM pages";
		$result = $pdo->query($sql);
		$totalCount = $result->rowCount();
		$this->totalElementsCount = $totalCount;
		
		$this->ElementsPerPage = $ElementsPerPage;
	}
	
	public function pagesAndLinksCalculator(){
		$numofpages = ceil($this->totalElementsCount / $this->ElementsPerPage);
		$i = 1;
		while($i <= $numofpages)
			{
				$pagelinks[] = $i;
				$i++;
			}
		return $pagelinks;
	}
	
}

$paginator = new Paginator($pdo); // Второй аргумент не указываю, по умолчанию - 3 элемента на странице.
$totalElements = $paginator->totalElementsCount;
$pagelinks = $paginator->pagesAndLinksCalculator();

?>

<html>
	<?php echo "Всего статей: " . $totalElements; ?>
	<h1>Страницы:</h1>
	<?php foreach($pagelinks as $pagelink): ?>
	<a href="?page=<?php echo $pagelink ?>"><?php echo $pagelink ?></a>
	<?php endforeach;?>
</html>


5d8bcfd600673650510441.png
  • Вопрос задан
  • 89 просмотров
Решения вопроса 2
SerafimArts
@SerafimArts
Senior Notepad Reader
Для начала, это не пагинатор, а курсор: https://ru.wikipedia.org/wiki/%D0%9A%D1%83%D1%80%D...

Задача пагинатора - это получить произвольный итератор и поделить его на чанки, а не лезть в базу данных.

P.S. Пример относительно (потому что избыточная связанность) нормально реализованного пагинатора: https://github.com/illuminate/pagination
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
[пред.] [в начало] [1] [2] ... [5] [6] [7] ... [9] [10] [в конец] [след.]
(текущая - 6-ая страница из 10-ти)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
24 нояб. 2024, в 21:55
200000 руб./за проект
24 нояб. 2024, в 21:41
1000 руб./за проект
24 нояб. 2024, в 21:19
35000 руб./за проект