Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Pomoc w paginacji
Forum PHP.pl > Forum > Przedszkole
Fred1485
Witam,

Bawię się teraz paginacją i mam taki kodzik:

  1. <?php
  2.  
  3. include('main.php');
  4.  
  5. $query_count = mysqli_query($uchwyt, "SELECT COUNT(id) FROM pagination");
  6. $count_result = mysqli_fetch_array($query_count);
  7.  
  8. $count = $count_result[0];
  9. $on_site = 7;
  10.  
  11. $pages = ceil($count / $on_site);
  12.  
  13. if(!isset($_GET['page']) || $_GET['page'] > $pages || $_GET['page'] <= 0 || !is_numeric($_GET['page'])) {
  14.  
  15. header('Location: pagination.php?page=1');
  16. }
  17. else {
  18.  
  19. $page = $_GET['page'];
  20. }
  21.  
  22. $limit = ($page - 1) * $on_site;
  23.  
  24. $query_data = "SELECT * FROM pagination LIMIT $limit, $on_site";
  25. $query_data = mysqli_query($uchwyt, $query_data);
  26.  
  27. while($result_data = mysqli_fetch_array($query_data)) {
  28.  
  29. echo $result_data['value']. '<br>';
  30. }
  31.  
  32. for($i=1;$i<=$pages;$i++) {
  33.  
  34. if($i == $page) {
  35.  
  36. echo '<b>'. $i. '</b> ';
  37. }
  38. else {
  39.  
  40. echo '<a href=pagination.php?page='. $i. '>['. $i. ']</a> ';
  41.  
  42. }
  43. }
  44.  
  45.  
  46.  
  47. ?>


Udało mi się samemu ze wskazówkami do tego dojść i w efekcji dostaję paginację:

88
99
111
222
333
444
555 (jakieś liczby z bazy)

[1] 2 [3] [4] (dla strony drugiej)

Jak może część z was się domyśliła na tym nie zamierzam poprzestać i zrobić żeby dla np strony pierwszej pojawiało się po wszystkich linkach do numerów stron DO OSTATNIEJ a dla ostatniej DO PIERWSZEJ itp wink.gif Próbowałem jakoś to zrobić i działa tylko że mam pętlę i ten link się pojawia dla wszystkich podstron sad.gif Może ktoś coś podpowie?

Poradziłem sobie ale wydaję mi się że można to zrobić dużo prościej biggrin.gif Może ktoś się jeszcze odezwie i mnie oświeci wink.gif Jak narazie działa takie coś:

  1. <?php
  2.  
  3. include('main.php');
  4.  
  5. $query_count = mysqli_query($uchwyt, "SELECT COUNT(id) FROM pagination");
  6. $count_result = mysqli_fetch_array($query_count);
  7.  
  8. $count = $count_result[0];
  9. $on_site = 5;
  10.  
  11. $pages = ceil($count / $on_site);
  12.  
  13. if(!isset($_GET['page']) || $_GET['page'] > $pages || $_GET['page'] <= 0 || !is_numeric($_GET['page'])) {
  14.  
  15. header('Location: pagination.php?page=1');
  16. }
  17. else {
  18.  
  19. $page = $_GET['page'];
  20. }
  21.  
  22. $limit = ($page - 1) * $on_site;
  23.  
  24. $query_data = "SELECT * FROM pagination LIMIT $limit, $on_site";
  25. $query_data = mysqli_query($uchwyt, $query_data);
  26.  
  27. while($result_data = mysqli_fetch_array($query_data)) {
  28.  
  29. echo $result_data['value']. '<br>';
  30. }
  31.  
  32. if($count > 1) {
  33.  
  34. if($page == 1) {
  35.  
  36. for($i=1;$i<=$pages;$i++) {
  37.  
  38. if($i == $page) {
  39.  
  40. echo '<b>'. $i. '</b> ';
  41. }
  42. else {
  43.  
  44. echo '<a href=pagination.php?page='. $i. '>['. $i. ']</a> ';
  45. }
  46. }
  47. echo '<a href=pagination.php?page='. $pages. '>OSTATNIA</a>';
  48. }
  49. elseif($page == $pages) {
  50.  
  51. echo '<a href=pagination.php?page=1>PIERWSZA</a> ';
  52.  
  53. for($i=1;$i<=$pages;$i++) {
  54.  
  55. if($i == $page) {
  56.  
  57. echo '<b>'. $i. '</b> ';
  58. }
  59. else {
  60.  
  61. echo '<a href=pagination.php?page='. $i. '>['. $i. ']</a> ';
  62. }
  63. }
  64. }
  65. else {
  66.  
  67. echo '<a href=pagination.php?page=1>PIERWSZA</a> ';
  68.  
  69. for($i=1;$i<=$pages;$i++) {
  70.  
  71. if($i == $page) {
  72.  
  73. echo '<b>'. $i. '</b> ';
  74. }
  75. else {
  76.  
  77. echo '<a href=pagination.php?page='. $i. '>['. $i. ']</a> ';
  78. }
  79. }
  80. echo '<a href=pagination.php?page='. $pages. '>OSTATNIA</a>';
  81. }
  82. }
  83. else {
  84.  
  85. echo 'STRONA <b>1</b> z <b>1</b>';
  86. }
  87.  
  88. ?>
MiFlo
Propounje użycie LIMIT w sql smile.gif

  1. LIMIT offest,page


Offset podajesz ilość jaką chcesz mieć na stonie a w page którą strone :-)
robertpiaty
Link do pierwszej masz zawsze
  1. ?page = 1
Do ostatniej nie wiele trudniej
  1. $lastPage = $count / $on_site;
  2. if($count % $on_site != 0){
  3. $lastPage ++;
  4. }
  5.  
  6. i w linku ostatnim ?page=$lastPage


W iflologii możesz sobie sprawdzić czy jesteś na pierwszej czy na ostatniej stronie i wyświetlić odpowiednie linki
Fred1485
A już całkiem dążąc do doskonałości znalazłem takie coś, efekt mi się bardzo podoba http://www.forum.legalne.info.pl/phpmysqlp...oat-t40261.html

I takie pytanie mam odnośnie:

  1. <?php
  2. require_once "connect.php";
  3. ?>
  4. <!DOCTYPE HTML>
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  8. <title>Paginacja - Michał Załęcki</title>
  9. <link href="style.css" rel="stylesheet" type="text/css">
  10. </head>
  11. <body>
  12. <?php
  13. //musimy wyciągnąć z bazy informacje o ilości postów ogólnie do wyliczenia ilości stron
  14. //celowo nie kożystamy z SQL_CALC_FOUND_ROWS, bo zależy nam na zabezpieczeniu się przed wś****skimi
  15. //użytkownikami, którzy zmodyfikują url i będą chcieli wejść na stronę jaka nie istnieje
  16. $query = "SELECT COUNT(*) as all_posts FROM news";
  17. $result = mysql_query($query) or die (mysql_error());
  18. $row = mysql_fetch_array($result);
  19. extract($row);
  20.  
  21. $onpage = 5; //ilość newsów na stronę
  22. $navnum = 7; //ilość wyświetlanych numerów stron, ze względów estetycznych niech będzie to liczba nieparzysta
  23. $allpages = ceil($all_posts/$onpage); //wszysttkie strony to zaokrąglony w górę iloraz wszystkich postów i ilości postów na stronę
  24.  
  25. //sprawdzamy poprawnośc przekazanej zmiennej $_GET['page'] zwróć uwage na $_GET['page'] > $allpages
  26. if(!isset($_GET['page']) or $_GET['page'] > $allpages or !is_numeric($_GET['page']) or $_GET['page'] <= 0){
  27. $page = 1;
  28. }else{
  29. $page = $_GET['page'];
  30. }
  31. $limit = ($page - 1) * $onpage; //określamy od jakiego newsa będziemy pobierać informacje z bazy danych
  32.  
  33. $query = "SELECT * FROM news ORDER BY id DESC LIMIT $limit, $onpage";
  34. $result = mysql_query($query) or die (mysql_error());
  35.  
  36. while($row = mysql_fetch_array($result)){
  37. echo "<h1>".$row['title']."</h1>";
  38. echo "<p>".$row['content']."</p>";
  39. echo "<hr>";
  40. }
  41.  
  42. //zabezpieczenie na wypadek gdyby ilość stron okazała sie większa niż ilośc wyświetlanych numerów stron
  43. if($navnum > $allpages){
  44. $navnum = $allpages;
  45. }
  46.  
  47. //ten fragment może być trudny do zrozumienia
  48. //wyliczane są tu niezbędne dane do prawidłowego zbudowania pętli
  49. //zmienne są bardzo opisowę więc nie będę ich tłumaczyć
  50. $forstart = $page - floor($navnum/2);
  51. $forend = $forstart + $navnum;
  52.  
  53. if($forstart <= 0){ $forstart = 1; }
  54.  
  55. $overend = $allpages - $forend;
  56.  
  57. if($overend < 0){ $forstart = $forstart + $overend + 1; }
  58.  
  59. //ta linijka jest ponawiana ze względu na to, że $forstart mogła ulec zmianie
  60. $forend = $forstart + $navnum;
  61. //w tych zmiennych przechowujemy numery poprzedniej i następnej strony
  62. $prev = $page - 1;
  63. $next = $page + 1;
  64.  
  65. //nie wpisujemy "sztywno" nazwy skryptu, pobieramy ja od serwera
  66. $script_name = $_SERVER['SCRIPT_NAME'];
  67.  
  68. //ten fragment z kolei odpowiada za wyślwietenie naszej nawigacji
  69. echo "<div id=\"nav\"><ul>";
  70. if($page > 1) echo "<li><a href=\"".$script_name."?page=".$prev."\">Poprzednia</a></li>";
  71. if ($forstart > 1) echo "<li><a href=\"".$script_name."?page=1\">[1]</a></li>";
  72. if ($forstart > 2) echo "<li>...</li>";
  73. for($forstart; $forstart < $forend; $forstart++){
  74. if($forstart == $page){
  75. echo "<li class=\"current\">";
  76. }else{
  77. echo "<li>";
  78. }
  79. echo "<a href=\"".$script_name."?page=".$forstart."\">[".$forstart."]</a></li>";
  80. }
  81. if($forstart < $allpages) echo "<li>...</li>";
  82. if($forstart - 1 < $allpages) echo "<li><a href=\"".$script_name."?page=".$allpages."\">[".$allpages."]</a></li>";
  83. if($page < $allpages) echo "<li><a href=\"".$script_name."?page=".$next."\">Następna</a></li>";
  84. echo "</ul></div><div class=\"clear\">";
  85. ?>
  86. </body>
  87. </html>


Mam problem z obczajeniem tego fragmentu:

  1. //ten fragment może być trudny do zrozumienia
  2. //wyliczane są tu niezbędne dane do prawidłowego zbudowania pętli
  3. //zmienne są bardzo opisowę więc nie będę ich tłumaczyć
  4. $forstart = $page - floor($navnum/2);
  5. $forend = $forstart + $navnum;
  6.  
  7. if($forstart <= 0){ $forstart = 1; }
  8.  
  9. $overend = $allpages - $forend;
  10.  
  11. if($overend < 0){ $forstart = $forstart + $overend + 1; }
  12.  
  13. //ta linijka jest ponawiana ze względu na to, że $forstart mogła ulec zmianie
  14. $forend = $forstart + $navnum;
  15. //w tych zmiennych przechowujemy numery poprzedniej i następnej strony
  16. $prev = $page - 1;
  17. $next = $page + 1;
  18.  
  19. //nie wpisujemy "sztywno" nazwy skryptu, pobieramy ja od serwera
  20. $script_name = $_SERVER['SCRIPT_NAME'];
  21.  


Tutaj autor nie okomentował za bardzo co robi...Wiecie o co tu kaman DOKŁADNIE? Chodzi pewnie o te strony widoczne w linkach?
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.