Сокращенный вывод ссылок на страницы при постраничном выводе из базы данных.

Flashbacks

Новичок
Всем добрый день!

Сделал постраничный вывод результата запроса из базы:


// Запрос в базу на количество записей:
$q="SELECT count(*) FROM list";

// Результат запроса:
$result=$db_query($q);

// Количество строк в результате запроса:
$total_rows = pg_num_rows($result);

//Количество записей на странице:
$per_page=20;

//Количество страниц:
$num_pages=ceil($total_rows/$per_page);


// получаем номер страницы
if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;
// вычисляем первый оператор для LIMIT
$start=abs($page*$per_page);



echo "Pages:&nbsp ";

for($i=1;$i<=$num_pages;$i++) {
if ($i-1 == $page) {
echo $i." ";
} else {
echo '<a href="'.$PHP_SELF.'?page='.$i.'">'.$i."</a> ";
}
}

Таким образом я получаю список страниц в виде:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

(Текущая номер страницы не является ссылкой)

Но количество страниц очень быстро заполняется с ростом базы данных, в конечном итоге кличество таких ссылок станет неприлично некрасивым.
Очень часто встречается такой вывод страниц (например на форумах):

<< < 1 2 3 4 5 ... 10 ... 23 24 25 > >>
(< и > листают по одной, << и >> - например по 10 влево-вправо).
Может у кого-то есть готовый пример как это делается, или как доработать использованный мной пример?
 

Vin-Diesel

Новичок
Напиши алгоритм, тут делов-то)
если страниц меньше 10, выводим по твоему методу
если больше и текущая страница > 4, выводим первые три (1,2,3), дальше "...", после текущую, если текущая < количество страниц - 3, выводим последние три
и т.д.
 
Сверху