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