Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Klasa Paginatora - porady, co zmienić?
Snake
post 8.03.2017, 15:40:02
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 5.02.2014

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


Witam,

Krótkie mam pytanie, otóż czy dobrze napisałem ten kod? Co tu może być błędnego? Jak powinien wyglądać konstruktor?

Kod PHP:

  1. <?
  2. class Pagination {
  3. private $perPage = 0;
  4. private $countRecords = 0;
  5. private $page;
  6. private $from;
  7. private $startLimit = 0;
  8. private $val;
  9. private $min;
  10. private $max;
  11. public function __construct($current = null, $limit = null, $startLimit = null)
  12. {
  13. $this->page = (int)$current;
  14. $this->perPage = (int)$limit;
  15. $this->startLimit = (int)$startLimit;
  16. }
  17. private function displayResults($val, $min, $max)
  18. {
  19. return ($val >= $min && $val <= $max);
  20. }
  21. private function onPage($perPage) {
  22. return $perPage;
  23. }
  24. private function page()
  25. {
  26. if(isSet($_GET['page']))
  27. {
  28. $page = $_GET['page'];
  29. }
  30. else
  31. {
  32. $page += 1;
  33. }
  34. return $page;
  35. }
  36. private function startLimit()
  37. {
  38. $startLimit = ($this->page() * $this->onPage(30)) - $this->onPage(30);
  39. return $startLimit;
  40. }
  41. private function dataSelect($from)
  42. {
  43. $row = mysql_fetch_array(mysql_query('SELECT COUNT(*) AS total FROM ' . $from . ';'));
  44. return $row['total'];
  45. }
  46.  
  47.  
  48. private function firstPage() {
  49. return 1;
  50. }
  51. private function lastPage() {
  52. $allPages = ceil($this->dataSelect('city') / $this->onPage(30));
  53. return $allPages;
  54. }
  55. private function currentPage() {
  56. return $this->page();
  57. }
  58. private function previousPage() {
  59. if($this->page() > 1)
  60. {
  61. return '<a href="' . $_SERVER['PHP_SELF'] . '?page='.($this->currentPage() - 1).'">< poprzednia</a>';
  62. }
  63. else
  64. {
  65. return false;
  66. }
  67. }
  68. private function nextPage() {
  69. if($this->page() != $this->lastPage())
  70. {
  71. return '<a href="' . $_SERVER['PHP_SELF'] . '?page='.($this->currentPage() + 1).'">nastepna ></a>';
  72. }
  73. else
  74. {
  75. return false;
  76. }
  77. }
  78. public function allPages() {
  79. if($this->page() > 4)
  80. {
  81. echo '&nbsp;<a href="' . $_SERVER['PHP_SELF'] . '?page='.$this->firstPage().'"><< Pierwsza </a>';
  82. }
  83. echo $this->previousPage();
  84. for($i = 1; $i <= $this->lastPage(); $i++)
  85. {
  86. if($this->displayResults($i, ($this->page() - 3), ($this->page() + 5)))
  87. if($_GET['page'] == $i)
  88. {
  89. echo '<a href="' . $_SERVER['PHP_SELF'] . '?page=' . $i . '"><b>' . $i . '</b>&nbsp;';
  90. }
  91. else
  92. {
  93. echo '<a href="' . $_SERVER['PHP_SELF'] . '?page=' . $i . '">' . $i . '</b>&nbsp;';
  94. }
  95. }
  96. echo $this->nextPage();
  97. if($this->lastPage() != $this->currentPage())
  98. {
  99. echo '&nbsp;<a href="' . $_SERVER['PHP_SELF'] . '?page='.$this->lastPage().'">ostatnia >></a>';
  100. }
  101. else
  102. {
  103. return false;
  104. }
  105. }
  106. public function rowsLimit()
  107. {
  108. return 'LIMIT ' . $this->startLimit() . ', ' . $this->onPage(30) . '';
  109. }
  110. }
Go to the top of the page
+Quote Post
viking
post 8.03.2017, 15:42:41
Post #2





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


Praktycznie wszystko jest źle. Uzależniasz się od jednego źródła danych i to jeszcze przestarzały, nieistniejący w PHP7 mysql_*. Linki generowane na sztywno, mieszanie widoku. Zobacz jak to powinno być zrobione choćby na przykładzie https://github.com/zendframework/zend-paginator


--------------------
Go to the top of the page
+Quote Post
kapslokk
post 8.03.2017, 15:47:09
Post #3





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Ja mam natomiast pytanie:
  1. private function onPage($perPage) {
  2. return $perPage;
  3. }


Po cholere?
Go to the top of the page
+Quote Post
Snake
post 8.03.2017, 15:48:07
Post #4





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 5.02.2014

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


MySQL zamiast MySQLi jest tutaj tylko, aby sprawdzić czy to jakkolwiek działa, oczywiście w projekcie będzie użyte MySQLi.

Także, nie chcę gotowca, a wypisać mi błędy jakie mam w kodzie.

Napisałeś, że wszystko jest źle, konkretniej? Paginator jest moim wstępem do OOP.


Cytat(kapslokk @ 8.03.2017, 15:47:09 ) *
Ja mam natomiast pytanie:
  1. private function onPage($perPage) {
  2. return $perPage;
  3. }


Po cholere?



No i o to chodzi, wytykanie mi błędów.

Ten post edytował Snake 8.03.2017, 15:49:36
Go to the top of the page
+Quote Post
viking
post 8.03.2017, 16:52:36
Post #5





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


Sam sobie odpowiedziałeś co jest największym problemem. Chcąc zmienić źródło musisz przepisać całą klasę pod inny sterownik. Nie ma to sensu żadnego. A to samo dotyczy linków i warstwy widoku.


--------------------
Go to the top of the page
+Quote Post
com
post 8.03.2017, 18:22:17
Post #6





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


Poczytaj o PSR i trzymaj się standardu formatowania kodu. No i nie mieszaj wszystkich warstw co już zostało napisane wink.gif
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 7.07.2025 - 04:00