<?php
$limit = 3; // кол-во постов на страницу
if ( isset($_GET['page']) && $_GET['page'] > 0 ) { // номер страницы
$current_page = intval($_GET['page']); // -1 /-> 1 , -3 /-> 3
} else {
$current_page = 1;
}
$query = "select count(*) as count from posts where published = 1"; // формирование запроса
$count_rows = $app['database']->getRows($query); // получить общее число записей в таблице posts
$count_rows = $count_rows[0]['count']; // всего записей ~20
$offset = ($current_page - 1) * $limit; // с какого номера строки получить посты -- (2 - 1) * 3 = 3
$total_pages = intval(($count_rows - 1) / $limit) + 1; // целое число - кол-во ссылок для пагинации
$query = "select * from posts where published = 1 order by id DESC LIMIT {$offset}, {$limit}";
$posts = $app['database']->getRows($query);
?>
<div class="pagination">
<?php
if ($current_page > $total_pages) {
echo "<p>Запрашиваемой страницы #$current_page не существует</p>
<br>
<a href='$path'>Вернуться на главную</a>";
} else {
for ($i = 1; $i <= $total_pages; $i++) {
$current_page == $i ? $attr = "class='active'" : $attr = "href='?page=$i'";
echo "<a $attr>$i</a>";
}
}
?>
</div>