Разбивка ссылок на страницы Pagination

У меня есть следующий метод, который создает и возвращает разметку для моих ссылок на страницы в PHP.

public function getPaginationLinks($options) { if($options['total_pages'] > 1) { $markup = '<div class="pagination">'; if($options['page'] > 1) { $markup .= '<a href="?page=' . ($options['page'] - 1) . ((isset($options['order_by'])) ? "&sort=" . $options['order_by'] : "") . '">< prev</a>'; } for($i = 1; $i <= $options['total_pages']; $i++) { if($options['page'] != $i) { $markup .= '<a href="?page='. $i . ((isset($options['order_by'])) ? "&sort=" . $options['order_by'] : "") . '">' . $i . '</a>'; } else { $markup .= '<span class="current">' . $i . '</span>'; } } if($options['page'] < $options['total_pages']) { $markup .= '<a href="?page=' . ($options['page'] + 1) . ((isset($options['order_by'])) ? "&sort=" . $options['order_by'] : "") . '">next ></a>'; } $markup .= '</div>'; return $markup; } else { return false; } } 

Недавно я обнаружил (к моему удивлению), что я достиг 70 + страниц, что означает, что теперь есть 70 ссылок.

Мне интересно, может ли кто-нибудь помочь мне разобраться в этом. Я не знаю, как работает большинство страниц, показывая числа, если я скажу .. стр. 30, идеи?

Вы просто показываете текущую страницу плюс предыдущую и следующие x (скажем, 4) страницы.

Если вы находитесь на странице 1:

 1 2 3 4 5 

Страница 35:

 31 32 33 34 35 36 37 38 39 

Страница 70:

 66 67 68 69 70 

Вы также можете добавить быструю ссылку на первую и последнюю страницу, используя « и » например.


Пример:

 $x = 4; for ($i = $currentPage - $x; $i < $currentPage; $i++) { if ($i >= 1) { /* show link */} else { /* show ellipsis and fix counter */ $i = 1; } } /* show current page number without link */ for ($i = $currentPage + 1; $i < $currentPage + $x; $i++) { if ($i <= $totalPages) { /* show link */} else { /* show ellipsis and break */ break; } } 

Вы также можете внедрить Infinite History / Pagination , которая круто. знак равно


UPDATE: более элегантная версия этого кодекса .

Вы можете сделать (на странице 15)

 [View Previous] 12 13 14 [15] 15 17 18 [View More] 

Если ссылка [Просмотреть больше] выбирает остальные (или еще несколько) ссылок на страницы. Это позволяет сохранять вещи незагроможденными, позволяя пользователю перемещаться по всем страницам.

Пример (после нажатия кнопки «Просмотр»)

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [15] 15 17 18 [View More] 

или (просто покажите еще несколько) [Подробнее] 7 8 9 10 11 12 13 14 [15] 15 17 18 [Подробнее]

Когда я говорю «fetch», я имею в виду использование javascript для создания ссылок на другие страницы без перезагрузки страницы

Рассмотрим «логарифмическую разбивку на страницы», как описано здесь (вложенный PHP-код):

Как выполнять навигацию по страницам для многих, многих страниц? Логарифмическая навигация по страницам

Вы также можете посмотреть Zend_Paginator , который обрабатывает много таких вещей для вас.