Задача: Постраничный вывод
Исходник: Расширенный список + первая/последняя страницы, язык: php [code #87, hits: 11618]
автор: this [добавлен: 04.03.2006]
  1. <!-- Отображение пострачного вывода -->
  2. <?php
  3. $N = 145;
  4. $perPage = 10;
  5. $currOffset = 70;
  6. if (isset($_GET['st'])) $currOffset = $_GET['st'];
  7.  
  8. // Количество соседних номеров страниц с каждой стороны,
  9. // отображающихся рядом с текущей страницей
  10. $xwidth = 2;
  11.  
  12. $currNum = 0;
  13. $prevOffset = -1;
  14. if ($currOffset - $perPage >= 0) $prevOffset = $currOffset - $perPage;
  15.  
  16. $nextOffset = 0;
  17. if ($currOffset + $perPage < $N) $nextOffset = $currOffset + $perPage;
  18.  
  19. if ($prevOffset >= 0) {
  20. print ' <a href="?st='.$prevOffset.'">Предыдущая страница</a> ';
  21. }
  22.  
  23. // Флаги вывода левого и правого многоточия
  24. $leftBlankOut = $rightBlankOut = false;
  25. for ($i = 0; $i < $N; $i += $perPage) {
  26. $currNum++;
  27.  
  28. // Манипулируем выводом левого многоточия
  29. if ($i > 0 && ($i <= $currOffset - $xwidth * $perPage - $perPage)) {
  30. if (!$leftBlankOut) print '...';
  31. $leftBlankOut = true;
  32. continue;
  33. }
  34.  
  35. // Манипулируем выводом правого многоточия
  36. if ($i < ($N - $perPage) && ($i >= $currOffset + $xwidth * $perPage + $perPage)) {
  37. if (!$rightBlankOut) print '...';
  38. $rightBlankOut = true;
  39. continue;
  40. }
  41.  
  42. if ($i == $currOffset) {
  43. print ' <b>'.$currNum.'</b> ';
  44. } else {
  45. print ' <a href="?st='.$i.'">'.$currNum.'</a> ';
  46. }
  47. }
  48.  
  49. if ($nextOffset) {
  50. print ' <a href="?st='.$nextOffset.'">Следующая страница</a> ';
  51. }
  52.  
  53. print "<br><br>";
  54. ?>
  55.  
  56. <!-- Отображение данных(объектов) текущей страницы -->
  57. <b>Объекты</b>:<br>
  58. <?php
  59. $end = $currOffset + $perPage;
  60. if ($end > $N) $end = $N;
  61. for ($i = $currOffset; $i < $end; $i++) {
  62. print ($i+1).'<br>';
  63. }
  64. ?>
Выводит номер текущей страницы и некоторое, заданное количество ссылок на другие страницы справа и слева от номера текущей страницы.
+ Ссылки на предыдущую и следующую страницы.
+ Ссылки на первую и последнюю страницу.

Для идентификации страниц используется смещение offset в количестве пропускаемых объектов

+добавить реализацию