Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]błędy w ilosci stron paginacji
Forum PHP.pl > Forum > Przedszkole
shreker
mam problem przy generowaniu ilosci stron w paginacji, załóżmy że mamy 39 elementów i ustawiamy 20 elementów na stronie - wygenerowane zostaną 2 podstrony (prawidłowo), ale przy 40 elementach już są generowane 3 podstrony (1 pusta), gdzie jest błąd ?
  1. // laczna ilosc, ilosc w rzedzie, ilosc na stronie, dlugosc podstron w paginacji, GET, adres strony
  2. function get_pagenumbers($entries, $rzad, $config_rows, $config_maxshow, $config_page, $adres)
  3. {
  4. $prev = '« cofnij';
  5. $next = 'dalej »';
  6. $config_totalPages = ceil(($entries) / ($rzad * $config_rows));
  7. $start = 0;
  8. $end = $config_totalPages - 1;
  9. if($config_maxshow < $config_page || (($rzad * $config_rows * $config_maxshow) < $entries))
  10. {
  11. if($config_page >= ($config_maxshow + 1) && $config_page < $end - $config_maxshow)
  12. {
  13. $start = $config_page - $config_maxshow;
  14. }
  15. else if($end < $config_page + $config_maxshow + 1 && $config_totalPages-1 >= $config_maxshow * 2+1)
  16. {
  17. $start = $config_totalPages - 1 - $config_maxshow * 2;
  18. }
  19. else
  20. {
  21. $start = 0;
  22. }
  23. if($config_page + $config_maxshow + 1 > $config_totalPages-1)
  24. {
  25. $end = $entries / ($rzad * $config_rows);
  26. }
  27. else if($start == 0 && $end > $config_maxshow * 2)
  28. {
  29. $end = $config_maxshow * 2;
  30. }
  31. else if($start == 0 && $config_totalPages <= $config_maxshow * 2)
  32. {
  33. $end = $config_totalPages - 1;
  34. }
  35. else
  36. {
  37. $end = ($config_page + $config_maxshow);
  38. }
  39. }
  40. if ($config_totalPages <= 1)
  41. {
  42. echo '';
  43. }
  44. else
  45. {
  46. echo '<p align="center"><div class="pagination">';
  47. if(($config_page-1) >= 0)
  48. {
  49. echo '<span class=""><a href="'.$adres.'page='.($config_page-1).'">'.$prev.'</a></span>';
  50. }
  51. else
  52. {
  53. echo '<span class="disabled">'.$prev.'</span>';
  54. }
  55. if($start > 0)
  56. {
  57. echo ' ... ';
  58. }
  59. else
  60. {
  61. echo ' . ';
  62. }
  63. for($i = $start; $i <= $end; $i++)
  64. {
  65. if($config_page == $i)
  66. {
  67. echo '<span class="current">'.($i+1).'</span>';
  68. }
  69. else
  70. {
  71. echo '<span class=""><a href="'.$adres.'page='.$i.'">'.($i+1).'</a></span>';
  72. }
  73. }
  74. if(ceil($end) < $config_totalPages - 1)
  75. {
  76. echo ' ... ';
  77. }
  78. else
  79. {
  80. echo ' . ';
  81. }
  82. if(($config_page + 1) <= $config_totalPages - 1)
  83. {
  84. echo '<span class=""><a href="'.$adres.'page='.($config_page+1).'">'.$next.'</a></span>';
  85. }
  86. else
  87. {
  88. echo '<span class="disabled">'.$next.'</span>';
  89. }
  90. echo '</div></p>';
  91. }
  92. }
nospor
Ale sieczka.... kupa zmiennych, nie wiadomo co do czego, pewnie sam się nie orientujesz co jaka zmienna robi...

Na dobrą sprawę o to:
$config_totalPages = ceil(($entries) / ($rzad * $config_rows));
powinno odpowiadać za ilość stron, czyli powinno być:
$config_totalPages = ceil(40/20); //2
Czy tak u ciebie jest?
shreker
dokładnie nospor - to jest dokładnie w 6 linijce kodu ?! dokładnie "gubi się przy 160", dla 140 elementów podaje właściwą ilość, a przy 160 elementach już podaje jedną stronę więcej.
nospor
Sprawdź lepiej co zawierają zmienne.... bo php w tak banalnym liczeniu się nie gubi
  1. $config_totalPages = ceil(($entries) / ($rzad * $config_rows));
  2. var_dump($entries);
  3. var_dump($rzad);
  4. var_dump($config_rows);
  5. var_dump($config_totalPages);

i sprawa będzie jasna.
shreker
dokładnie w kolejności dla 380 elementów:

int(380)
int(4)
float(5)
float(19)

czyli teoretycznie poprawnie, ale stron jest nie 19 ale 20 (20 oczywiści pusta), tak jak wcześnie napisałem przy 140 elementach jest ok, ale przy 160 dodaje już dodatkową stronę.
nospor
Czyli błąd masz dalej w tej masie IFów.... musisz sobie teraz echować w każdej linii stan zmiennych aż znajdziesz błąd. Robota raptem na 5 minut.
shreker
:-) robota na 5 minut, a piszemy od godziny i jesteśmy w miejscu. skoro wiedziałbym gdzie może być błąd to bym nie pisał, wcześniej już szukałem i dopiero teraz napisałem na forum.
nospor
Kurcze.... robisz var_dump po każdym z IFów i widzisz co ci szwankuje. Naprawdę to jest robota na 5 minut. Przecież w którymś miejscu zmienna strona przyjmuje złą liczbę i znalezienie tego miejsca to naprawdę zadna filozofia metodą var_dump....
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.