Алгоритм пагинации?

Нужен алгоритм вот такой пагинации:

33dd1cf5.png


Вариант реализации, но он не очень красив:

$count_entrys = 148; // количество записей
$entry_on_page = 15; // количество записей на странице
$current_page = 5; // текущая страница
$max_pages_list = 5; // сколько номеров страниц показывать

$count_pages = ceil($count_entrys / $entry_on_page);

$first_page = $current_page - (int) ($max_pages_list / 2);
if ( $first_page <= 1 )
	$first_page = 1;
else {
	if ( $count_pages - $first_page < $max_pages_list ){
		$first_page = $count_pages - $max_pages_list + 1;
		if ( $first_page <= 1 )
			$first_page = 1;
	}
}
$last_page = $first_page + $max_pages_list - 1;
if ( $last_page > $count_pages )
	$last_page = $count_pages;

if ( $first_page != 1 )
	echo '< |';

for ( $i = $first_page; $i <= $last_page; $i++ ){
	echo ' ', $i, ' |';
}

if ( $last_page < $count_pages )
	echo ' >';
  • Вопрос задан
  • 8539 просмотров
Решения вопроса 1
taliban
@taliban
php программист
И что именно Вам кажется некрасивым? Вариант рабочий? Работает без ошибок? Вам наверно больше нет работы кроме как «делать красиво» из стандартного алгоритма пагинации. Если Вам уж очень сильно хочется сделать «красиво» можете заменить один из ифов (который просчитывает страницы) на php.net/manual/en/function.range.php, и фор на implode + array_map. Кода будет меньше, но поверьте, то что у Вас есть сейчас — стандартный код, так пишут почти все, и так проще будет Вам и другим менять его в будуйщем.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Strange
@Strange Автор вопроса
Вариант рабочий и написан мною после обнаружения небольшого бага в предыдущем.
Спросил, дабы поставить для себя точку в вопросе и не искать более оптимального варианта. Если получился стандартный код — хорошо.
Спасибо за ответ.
Ответ написан
Seldon
@Seldon
$count_entrys = 148; // количество записей
$entry_on_page = 15; // количество записей на странице
$current_page = 5; // текущая страница
$max_pages_list = 5; // сколько номеров страниц показывать

$count_pages = ceil($count_entrys / $entry_on_page);
$from = $current_page + ceil(($max_pages_list-1) / 2);
$to = $current_page + floor(($max_pages_list-1) / 2);

echo «some link for previos page $current_page-1»;
for($i = $from; $i <= $to; $i++ ) {
echo «somelink for page number $i»;
}
echo «some link for next page $current_page+1»;

соответственно добавить проверки на существование предыдущей и следующий страницы тут думаю понятно.

А вообще странный вопрос для хабра, тут делать нечего алгоритма то по сути нет все элементарно и просто. Да и к тому же вы даже не описали как он работать должен и стрелочки по бокам куда ведут.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы