Постраничная навигация 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>';

?>

введите сюда описание изображения


Ответы (0 шт):