Постраничная навигация php. Как сделать смещение страниц
Ребят, помогите решить проблему.
Написал пагинацию и все прекрасно работает.
Но, если посмотреть на скрин, то это просто ужас..
Чем меньше расширение экрана, тем хуже.
Нужно ограничить к-во выводимых страниц, скрыть предыдущие и наоборот.
Пример:
<< < 1 2 3 4 5 > >>
<< < 2 3 4 5 6 > >>
<< < 3 4 5 6 7 > >>
Но, как это сделать.. ничего умного в голову не приходит
UPD: добавил весь код который позволит без проблем сделать пагинацию на вашем сайте. В функции get_number_rows возможно нужно будет внести правки. Кому что не понятно, пишите, расскажу что к чему.
P.S. ArchDemon, спасибо за помощь в решении)
<?php
$page = (int)$_GET['page'];
if ($page < 1 || $page == '') $page = 1;
$limit = 20;
$start = get_start ($page, $limit);
$url = $_SERVER['REQUEST_URI'];
$url = mb_substr ($url, 0, strrpos($url, '='));
$table_name = 'имя таблицы';
$column_name = 'имя столбца';
/* начало для выборки записей по LIMIT */
function get_start ($page, $limit)
{
return $limit * ($page - 1);
}
/*
получаем к-во записей в таблице
$table_name - имя таблицы
$column_name - имя столбца
$get_id - $_GET
$pdo - подключение к БД
и возвращает к-во записей
*/
function get_number_rows ($table_name, $column_name, $get_id, $pdo) {
$stmt = $pdo->query("SELECT COUNT(*) FROM $table_name WHERE $column_name = $get_id");
while ($result = $stmt->fetch(PDO::FETCH_NUM))
{
$count_articles = $result[0];
}
return $count_articles;
}
/*
показ постраничной навигации
функция принимает
$page - номер страницы $_GET['page']
$limit - сколько записей выводить на одной странице
$count_articles которую возвращает функция get_number_rows
$url = $_SERVER['REQUEST_URI']
*/
function pagination ($page, $limit, $count_articles, $url) {
$url .= '=';
$count_pages = ceil($count_articles / $limit);
if ($page > $count_pages) $page = $count_pages;
$prev = $page - 1;
$next = $page + 1;
if ($prev < 1) $prev = 1;
if ($next > $count_pages) $next = $count_pages;
$pagination = '';
if ($count_pages > 1)
{
// пагинация
if ($page == 1)
{
$pagination;
}
else
{
if (($prev == 1 || $page != $count_pages) || $page == $count_pages)
{
$pagination .= '<a class="pgn_link" href="' . $url . '1">[ << ]</a>';
$pagination .= '<a class="pgn_link" href="' . $url . $prev . '">[ < ]</a>';
}
}
for ($i = max($page - 3, 1); $i <= min(max($page - 3, 1) + 4, $count_pages); $i++)
{
if ($i == $page) $pagination .= '<span class="active">[ ' . $i . ' ]</span>';
else $pagination .= '<a class="pgn_link" href="' . $url . $i . '">[ ' . $i . ' ]</a>';
}
if ($page == $count_pages)
{
$pagination;
}
else
{
$pagination .= '<a class="pgn_link" href="' . $url . $next. '">[ > ]</a>';
$pagination .= '<a class="pgn_link" href="' . $url . $count_pages. '">[ >> ]</a>';
}
}
return $pagination;
}
/*
показываем пагинацию на нужной странице
*/
echo '<div class="pagination">';
$count_articles = get_number_rows ($table_name, $column_name, $get_subsections_id, $pdo);
echo pagination ($page, $limit, $count_articles, $url);
echo '</div>';
?>
