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

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: 23.08.2025 - 18:57