Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Odwrotna paginacja
Forum PHP.pl > Forum > Przedszkole
buliyo
Udało mi się napisać z tutorialu paginację ale mam problem z dostosowaniem jej do swoich potrzeb. Obecnie mam najnowsze rzeczy zawsze na pierwszej stronie.. Gdy dojdą następne przenoszą się one na drugą, trzecią i tak dalej. Chciałbym mieć stałe strony w odniesieniu do treści znajdujących się na nich. Czyli pierwsza strona w mojej paginacji będzie stroną na której znajdują się najstarsze wpisy.
Będę wdzięczny za wskazówki jak to zmienić.
/inc.page.php
http://pastebin.com/1Vf6sqkD

index.php
  1. $strony_ile2 = ceil($k_ile2/$ustawienia['strona_ile']);
  2.  
  3. if ($_GET['page'] == "" || $_GET['page'] == 1)
  4. {
  5. $strona = 1;
  6. $wstecz = $strony_ile2;
  7. $dalej = $strona + 1;
  8. if ($strona < $strony_ile2)
  9. {
  10. ?><div style="text-align: right;"><a href="?page=<?php echo $dalej;?>"><img style="border: 0px" src="img/starsze.png" onmouseover="this.src = 'img/starsze_hover.png'" onmouseout = "this.src = 'img/starsze.png'" /></a></div><?php
  11. }
  12. }
  13. else
  14. {
  15. $strona = $_GET['page'];
  16. $wstecz = $strona - 1;
  17. $dalej = $strona + 1;
  18.  
  19. if($strona < $strony_ile2)
  20. {
  21. ?>
  22. <div style="text-align: left; float: left;"><a href="?page=<?php echo $wstecz;?>"><img style="border: 0px" src="img/nowsze.png" onmouseover="this.src = 'img/nowsze_hover.png'" onmouseout = "this.src = 'img/nowsze.png'" /></a></div><div style="text-align: right; float: right;"><a href="?page=<?php echo $dalej;?>"><img style="border: 0px" src="img/starsze.png" onmouseover="this.src = 'img/starsze_hover.png'" onmouseout = "this.src = 'img/starsze.png'" /></a></div><br /><br />
  23. <?php
  24. }
  25. else
  26. {
  27. ?><div style="text-align: left;"><a href="?page=<?php echo $wstecz;?>"><img style="border: 0px" src="img/nowsze.png" onmouseover="this.src = 'img/nowsze_hover.png'" onmouseout = "this.src = 'img/nowsze.png'" /></a></div><?php
  28. }
  29. }
  30.  
  31. $oPager = new Vframe_Pagination($strony_ile2, 1, $strona);
  32. $oPager->PatternPage('<a href="?page=[$]" class="paginator_b">[$]</a>');
  33. $oPager->PatternPageCurrent('<span class="paginator_a">[$]</span>');
  34. $oPager->PatternSeparator('<span style="color: #FEBF01;"> ... </span>');
  35. echo ('<br /><br /><div style="text-align: center;">'.$oPager->Render(true, 3, 2, false).'</div>');
b4rt3kk
To nie kwestia paginatora tylko tego co wyświetlasz, jeśli z bazy to dodaj na końcu ORDER BY pole_daty
buliyo
Tak to jest wyciągane z sql, tylko jeśli zrobię to tak jak mówisz to będę miał dobrze powiązane strony z wpisami czli na pierwszej będą najstarsze ale numerki generować będzie mi cały czas odwrotnie. Czyli wchodząc na www będzie wyświetlało mi najstarsze wpisy na pierwszej stronie. Dodatkowo strony będą rosnąć w kolejności 1 2 3 4.. a powinny być 4 3 2 1. Nie wiem też jak zrobić aby domyślną stroną była ta o największym indeksie - tj 4.
b4rt3kk
A co ma zawierać ów paginator? Strony ułożone od ostatniej do pierwszej? Czyli 4 3 2 1? I jeszcze przyciski typu poprzednia i kolejna?

Zacząłbym od tego by wczytać dane wg daty rosnąco, a paginator w ten sposób:

  1. class Paginator {
  2.  
  3. public $currentPage;
  4. public $numberOfPages;
  5.  
  6. function __contruct($currentPage, $numberOfPages) {
  7.  
  8. $this -> numberOfPages = $numberOfPages;
  9.  
  10. if (!isset($currentPage) OR $currentPage>$numberOfPages OR $currentPage<1) {
  11. $this -> currentPage = $numberOfPages; // jesli ktos bedzie sie bawil z $_GET to ustawi mu maksymalna strone, tak samo gdy brak strony
  12. } else {
  13. $this -> currentPage = $currentPage; // ustawia aktualna strone
  14. }
  15. }
  16.  
  17. function paginator() {
  18. $paginator = '';
  19. for ($i=$this -> numberOfPages; $i>=1; $i--) {
  20. if ($i != $this -> currentPage) $paginator .= '<a href="link_do_strony">' . $i . '</a>'; else $paginator .= '<b>' . $i . '</b>';
  21. }
  22. return $paginator;
  23. }
  24.  
  25. }
  26.  
  27. // wywolanie
  28.  
  29. $p = new Paginator($currentPage, $numberOfPages);
  30. echo $p -> paginator();


To ulozy strony od konca do poczatku, najprostszy przyklad, musisz to jedynie rozbudowac.
buliyo
Nie wiem niestety jak tą klasę wykorzystać.. miała by być ona zamiast tej mojej oPage?
Chcę osiągnąć dokładnie taki efekt jak piszesz.. numeracja malejąca 22 21 20 19 ... 4 3 2 1, dodatkowo przełacznik następna, poprzednia i początkowa strona jest ostatnia zawsze czyli ta z największym indeksem.
b4rt3kk
Klasa jest bardzo prosta, musisz tylko wyświetlić funkcję paginator, sprawdz zresztą sam jak to działa. Na wejściu musisz tylko podać obecną stronę (walidacja wbudowana w klasę) i ile jest stron w sumie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.