11 Декабрь 2008

Пагинация на PHP

posted in PHP, Разработка |

Частенько приходится разбивать контент на сайтах постранично и выводить "менюшку" со списком номеров страниц, плюс ссылочки для перехода на предыдущую, следующую, первую и последнюю страницы.

С этим можно справиться таким кодом:

PHP:
  1. <?php
  2. $itemscount=123; // количество элементов (статей)
  3. $itemsperpage=10; // кол-во эл-в на странице
  4. if (isset($_REQUEST['page']))
  5.     { $cpage=$_REQUEST['page']; }
  6.     else { $cpage=1; }
  7. // если странца не задана, то будем на 1й
  8. $pagescount=ceil($itemscount/$itemsperpage); //кол-во страниц
  9. if ($cpage>1) {
  10.     // первая
  11.     echo '<a href="?page=1"><<</a> ';
  12.     // предыдущая
  13.     echo '<a href="?page='.($cpage-1).'"><</a> ';
  14. }
  15. if ($stpage>1) echo '... ';
  16. for ($i=$stpage;$i<=$endpage;$i++) {
  17.     if ($i==$cpage) { echo '<strong>'.$i.'</strong> '; }
  18.     else { echo '<a href="?page='.$i.'">'.$i.'</a> '; }
  19. }
  20. if ($endpage<$pagescount) echo '... ';
  21. if ($cpage<$pagescount) {
  22.     // след.
  23.     echo '<a href="?page='.($cpage+1).'">></a> ';
  24.     // последняя
  25.     echo '<a href="?page='.$pagescount.'">>></a> ';
  26. }
  27. ?>

Такой код хорош, если у вас страничек 5, но вот если их количество значительное, то намного приятнее будет смотреться что-что вроде:

<< < ... 10 11 12 13 14 15 16 ... > >>

Сейчас мы его "сбацаем"

PHP:
  1. <?php
  2. /*
  3. * Created on Dec 9, 2008 - 3:52:58 PM
  4. * by Vladimir Osipov
  5. */
  6. $itemscount=123; // количество элементов (статей)
  7. $itemsperpage=10; // кол-во эл-в на странице
  8. if (isset($_REQUEST['page']))
  9.     { $cpage=$_REQUEST['page']; }
  10.     else { $cpage=1; }
  11. // если странца не задана, то будем на 1й
  12. $pagedisprange=3; // соклько страниц до и после текущей выводить
  13. $pagescount=ceil($itemscount/$itemsperpage); // кол-во страниц
  14. $stpage=$cpage-$pagedisprange; // определим начиная с какого номера будем выводить страницы
  15. if ($stpage<1) { $stpage=1; } // если наше "начало" вылазит на отрицательные номера, то стави м в 1
  16. $endpage=$cpage+$pagedisprange; // аналогично с номером, по который будем выводить
  17. if ($endpage>$pagescount) { $endpage=$pagescount; } // если больше чем страниц, то последняя выводимая страницы - самая последняя наша
  18. if ($cpage>1) {
  19.     // first
  20.     echo '<a href="?page=1"><<</a> ';
  21.     // prev
  22.     echo '<a href="?page='.($cpage-1).'"><</a> ';
  23. }
  24. if ($stpage>1) echo '... '; // если начало вывода не 1, то напечатаем три точки
  25. for ($i=$stpage;$i<=$endpage;$i++) {
  26.     if ($i==$cpage) { echo '<strong>'.$i.'</strong> '; }
  27.     else { echo '<a href="?page='.$i.'">'.$i.'</a> '; }
  28. }
  29. if ($endpage<$pagescount) echo '... '; // если начало конец вывода не последняя страница, то напечатаем три точки
  30. if ($cpage<$pagescount) {
  31.     // next
  32.     echo '<a href="?page='.($cpage+1).'">></a> ';
  33.     // last
  34.     echo '<a href="?page='.$pagescount.'">>></a> ';
  35. }
  36. ?>

Вот такой простой код для красивой пагинации. Вскоре ждите PHP класс AJAX пагинации, где менюшку с линками странц будем реализовывать на JavaScript.

У нас куча комментариев (5) на запись “Пагинация на PHP”

Почему бы Вам не высказать своем мнение! Позвольте нам узнать, что Вы думаете...

  1. 1 On 11.12.2008, Sergius said:

    Класно смотритса, да вот немножко бы по раньше ато мне надо было я сам мучилса, правда видок у меня похуже!!!

  2. 2 On 11.12.2008, serega said:

    Весьма интересно, но не сложно, напоминает механизм как сделано на OSDATE

  3. 3 On 11.12.2008, scorpio said:

    та понятно, что несложно :)
    скоро будет более прикольная штука - осталось ее с мой реализации для Facebook с FBJS переделать

  4. 4 On 20.12.2008, maksim said:

    чуть посложнее будет с учётом QUERY_STRING если на этих страницах список с сортировкой или есть форма-фильтр. Надо бы поуниверсальнее сбацать :)

  5. 5 On 20.12.2008, scorpio said:

    не намного )
    выводить QUERY_STRING в ссылке на определенную страницу, меняя в ней только номер

Оставить комментарий