Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [klasa] Pager - prościutka klasa pagera, napisana z myślą o MVC
phpion
post
Post #1





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Witam,
właśnie na własne potrzeby napisałem prościutką klasę pagera. Nie posiada metody generującej kod HTML - ten element wykonywany jest już w samym widoku. Klasa lekka, a co za tym idzie szybka.
Do konkstruktora przekazujemy aktualnie wyświetlaną stronę oraz liczbę wszystkich stron.

// EDIT:
dodałem statyczną metodę (calculateTotal()) obliczającą liczbę stron potrzebnych do paginacji

  1. <?php
  2. class Pager {
  3. protected $_current = 0;
  4. protected $_total = 0;
  5. protected $_first = false;
  6. protected $_previous = false;
  7. protected $_next = false;
  8. protected $_last = false;
  9.  
  10. public function __construct($current, $total) {
  11. $this->_current = (int)$current;
  12. $this->_total = (int)$total;
  13.  
  14. // check if $current is >= 1
  15. if ($this->_current < 1) {
  16. $this->_current = 1;
  17. }
  18. // ...or is not out of the $total range
  19. else if ($this->_current > $this->_total) {
  20. $this->_current = $this->_total;
  21. }
  22.  
  23. // set the first, previous...
  24. if ($this->_current > 1) {
  25. $this->_first = $this->_previous = true;
  26. }
  27. // ...and next, last
  28. if ($this->_current < $this->_total) {
  29. $this->_next = $this->_last = true;
  30. }
  31. }
  32.  
  33. static public function calculateTotal($count, $perPage) {
  34. return ceil($count/$perPage);
  35. }
  36.  
  37. public function getCurrent() {
  38. return $this->_current;
  39. }
  40.  
  41. public function getTotal() {
  42. return $this->_total;
  43. }
  44.  
  45. public function getFirst() {
  46. return $this->_first;
  47. }
  48.  
  49. public function getPrevious() {
  50. return $this->_previous;
  51. }
  52.  
  53. public function getNext() {
  54. return $this->_next;
  55. }
  56.  
  57. public function getLast() {
  58. return $this->_last;
  59. }
  60. }
  61. ?>

oraz przykład zastosowania.
W kontrolerze:
  1. <?php
  2. // jawne okreslenie liczby stron
  3. $view->p = new Pager((isset($_GET['page']) ? $_GET['page'] : 1), 10);
  4. // obliczenie liczby stron potrzebnych do paginacji
  5. $view->p = new Pager((isset($_GET['page']) ? $_GET['page'] : 1), Pager::calculateTotal(101, 10));
  6. ?>

W widoku:
  1. <ul>
  2. <li>
  3. <?php if ($p->getFirst() === true): ?>
  4. <a href="./pager.php?page=1">&laquo;</a>
  5. <?php else: ?>
  6. &laquo;
  7. <?php endif; ?>
  8. </li>
  9.  
  10. <li>
  11. <?php if ($p->getPrevious() === true): ?>
  12. <a href="./pager.php?page=<?php echo $p->getCurrent()-1; ?>">&lsaquo;</a>
  13. <?php else: ?>
  14. &lsaquo;
  15. <?php endif; ?>
  16. </li>
  17.  
  18. <?php for($i=1; $i<=$p->getTotal(); $i++): ?>
  19. <li>
  20. <?php if ($i != $p->getCurrent()): ?>
  21. <a href="./pager.php?page=<?php echo $i; ?>"><?php echo $i; ?></a>
  22. <?php else: ?>
  23. <?php echo $i; ?>
  24. <?php endif; ?>
  25. </li>
  26. <?php endfor; ?>
  27.  
  28. <li>
  29. <?php if ($p->getNext() === true): ?>
  30. <a href="./pager.php?page=<?php echo $p->getCurrent()+1; ?>">&raquo;</a>
  31. <?php else: ?>
  32. &raquo;
  33. <?php endif; ?>
  34. </li>
  35.  
  36. <li>
  37. <?php if ($p->getLast() === true): ?>
  38. <a href="./pager.php?page=<?php echo $p->getTotal(); ?>">&rsaquo;</a>
  39. <?php else: ?>
  40. &rsaquo;
  41. <?php endif; ?>
  42. </li>
  43. </ul>


Ten post edytował phpion.com 30.12.2007, 10:33:54
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kicaj
post
Post #2





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


Nie wnosi nic nowego jak pozostalem klasy paginacji...

@normanos: Jak ty widzisz tutaj zachowanie helpera?
Go to the top of the page
+Quote Post
phpion
post
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(kicaj @ 30.12.2007, 04:24:49 ) *
Nie wnosi nic nowego jak pozostalem klasy paginacji...

No a niby co ma wnosić? Nie posiada nic poza konstruktorem i getterami. Mi w zupełności taka klasa wystarcza.

Cytat(kicaj @ 30.12.2007, 04:24:49 ) *
@normanos: Jak ty widzisz tutaj zachowanie helpera?

No pewnie na podobnej zasadzie jak przedstawiony widok. Helper po prostu by generował podobny kod. Ja jednak pozostanę przy obecnej wersji tj. dołączaniu powyższego kodu jako widoku. Naprawdę nie wiem co z nim jest takiego "be".
Go to the top of the page
+Quote Post

Posty w temacie
- phpion.com   [klasa] Pager - prościutka klasa pagera   29.12.2007, 19:13:24
- - normanos   mało przejrzyste, mało elastyczne, widok to już po...   29.12.2007, 20:50:18
|- - phpion.com   Cytat(normanos @ 29.12.2007, 22:50:18...   29.12.2007, 20:56:37
- - kicaj   Nie wnosi nic nowego jak pozostalem klasy paginacj...   30.12.2007, 02:24:49
|- - phpion.com   Cytat(kicaj @ 30.12.2007, 04:24:49 ) ...   30.12.2007, 10:32:46
- - sticker   ale dobrze by było udowodnić dlaczego uważasz że n...   30.12.2007, 10:47:12
- - phpion.com   Nie twierdzę, że wszystko jest mega pro. Po prostu...   30.12.2007, 10:50:43
- - acztery   chyba nie dokońca wiesz co to jest widok.   18.01.2008, 17:06:18
|- - phpion   Cytat(acztery @ 18.01.2008, 19:06:18 ...   18.01.2008, 17:10:06
- - normanos   @phpion: wybacz moją pośpieszną ocenę. nie jest ta...   18.01.2008, 21:26:50
- - my salsa   jak dla mnie klasa przyjemna, prosta i o to chodzi...   18.01.2008, 21:40:28
- - phpion   Cytat(normanos @ 18.01.2008, 23:26:50...   18.01.2008, 22:00:46
- - my salsa   Cytat(phpion @ 18.01.2008, 22:00:46 )...   18.01.2008, 22:35:45
- - normanos   $pagination->display('typ'); jest ...   19.01.2008, 11:58:50
|- - phpion   Cytat(normanos @ 19.01.2008, 13:58:50...   19.01.2008, 12:08:04
- - Cysiaczek   Wg mnie takie rozwiązanie widoku, jakie jest w jed...   19.01.2008, 12:35:23
- - normanos   phpion: tak, chodzi o różny rodzaj nawigatora. ocz...   19.01.2008, 12:48:53
- - phpion   @Cysiaczek & @normanos Fakt, klasa generująca ...   19.01.2008, 13:37:01
- - Cysiaczek   Chyba, że... [PHP] pobierz, plaintext <?phpcla...   19.01.2008, 13:50:29
- - janusz.master   Temat może nie na czasie ale zobaczyłem coś dziwne...   30.01.2008, 01:05:12
- - phpion   Cytat(janusz.master @ 30.01.2008, 03:05...   30.01.2008, 08:32:36


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 09:32