Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Klasa Paginatora - porady, co zmienić?
Forum PHP.pl > Forum > Przedszkole
Snake
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. }
viking
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
kapslokk
Ja mam natomiast pytanie:
  1. private function onPage($perPage) {
  2. return $perPage;
  3. }


Po cholere?
Snake
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.
viking
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.
com
Poczytaj o PSR i trzymaj się standardu formatowania kodu. No i nie mieszaj wszystkich warstw co już zostało napisane wink.gif
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.