Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyświetlanie danych z tabeli z podziałem na strony
winnetu
post
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 2.12.2005
Skąd: Brodnica :)

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


  1. <?php
  2. $query = "SELECT * FROM gal ORDER by id DESC";
  3. $result = mysql_query($query);
  4. $num = mysql_numrows($result);
  5.  
  6. $i = 0;
  7. while ($i < $num) {
  8.  
  9. $tresc = mysql_result($result,$i,"tresc");
  10. $od = mysql_result($result,$i,"od");
  11.  
  12. $i++;
  13. }
  14. ?>


W tabeli gal mam w chwili obecnej ponad 50 rekordów. Chciałbym były one wyświetlane po 10 na stronie. Tak aby automatycznie pojawiały się linki do kolejnych stron: strony 1 | 2 | ... | n
Wiem, że do ograniczenia wyników na jednej stronie jest polecenie LIMIT 0, 10 ale nie wiem jak zrobić aby dodawały się linki do kolejnych stron, na których będą rekordy 11-20, 21-30 itd, itd.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
barat
post
Post #2





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 19.05.2007

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


Jestem początkujący, ale pokaże Ci co ja zrobiłem:

(Większość komentarzy w j.ang ponieważ tak już się nauczyłem, polskie dopisane teraz)

Ten fragment zajmuje się łączeniem z bazą, i liczeniem potrzebnych limitów:

  1. <?php
  2. //do strony przekazany jest $page = $_GET['page'], oczywiście po sprawdzeniach
  3.  
  4. $conn = dbConnect(); //moja funkcja do łączenia się z bazą danych, Ty możesz mieć inną 
  5.  
  6. // Check number of rows (for pagination)
  7. $count = 'SELECT * FROM news';
  8. $count = mysql_query($count) or die(mysql_error());
  9. $numRows = mysql_num_rows($count);
  10. // Count limit for results
  11. $show_limit = 10; // określa ile ma być newsów na stronie
  12. $max_pages = ceil($numRows/$show_limit);
  13. $page = ($page = 0 || !$page || !is_numeric($page) ? 1 : $page);
  14. $page = ($page <= $max_pages ? $page : $max_pages);
  15. $limit_start = ($page * $show_limit) - $show_limit; //określa jaki będzie LIMIT w poleceniu SQL
  16. ?>


Teraz mając już $max_pages i $limit_start mogę zapytać SQL

  1. <?php
  2. // SQL query for get news
  3. $sql = "SELECT * FROM `news` ORDER BY `news_date` DESC LIMIT $limit_start, $show_li
    mit"
    ;
  4. $result = mysql_query($sql) or die(mysql_error());
  5. ?>


Następnie wyświetlam wyniki normalnie za pomocą while , a na samym dole dodaję:

  1. <?php
  2. paginate($page, $max_pages);
  3. ?>


A teraz jak wygląda sama funkcja paginate():

  1. <?php
  2. function paginate($cur_page, $last_page, $number = 1)
  3. {
  4. $real_number = ($number * 2) +1;
  5. if ($last_page < $real_number) {$istart = 1; $iend = $last_page;}
  6. elseif ($cur_page == 1) {$istart = 1; $iend = 1 + ($number * 2);}
  7. elseif ($cur_page == $last_page) {$istart = $cur_page - ($number * 2); $iend = $cur_page;}
  8. else {
  9. if ($cur_page + $number > $last_page) {
  10. $iend = $last_page;
  11. $istart = $last_page - ($number * 2); 
  12. } elseif ($cur_page - $number < 1) {
  13. $istart = 1;
  14. $iend = ($number * 2 + 1);
  15. } else {
  16. $istart = $cur_page - $number; $iend = $cur_page + $number;
  17. }
  18. }
  19. echo '<div id="pagination">';
  20. echo '<ul>';
  21. echo '<li class="pgn1st">';
  22. echo '<a href="?page=1" id="paginfirst';
  23. if ($cur_page == 1) {echo 'none';};
  24. echo '"><span>first</span></a></li>';
  25. echo '<li class="pgnprev"><a href="?page='.($cur_page == 1 ? 1 : $cur_page-1).'" id="paginprev';
  26. if ($cur_page == 1) {echo 'none';};
  27. echo '"><span>prev</span></a></li>';
  28. for($i=$istart; $i<=$iend; $i++)
  29. {
  30. echo '<li class="num"><a href="?page='.$i.'"';
  31. if ($i == $cur_page) {echo ' class="active"';};
  32. echo '>'.$i.'</a></li>';
  33. }
  34. echo '<li class="pgnnext"><a href="?page='.($cur_page == $last_page ? $cur_page : $cur_page + 1).'" id="paginnext';
  35. if ($cur_page == $last_page) {echo 'none';};
  36. echo '"><span>next</span></a></li>';
  37. echo '<li class="pgnlast"><a href="?page='.$last_page.'" id="paginlast';
  38. if ($cur_page == $last_page) {echo 'none';};
  39. echo '"><span>last</span></a></li>';
  40. echo '</ul>';
  41. echo '</div>';
  42. }
  43. ?>


Funkcja wyświetla paginator w postaci:

<< < 1 2 3 > >>
Czyli

FIRST PREV 1 2 3 NEXT LAST

Dla 9 podstron, gdy będziemy znajdowali się na przykład na 6 będzie to wyglądać tak:

FIRST PREV 5 6 7 NEXT LAST

Przy czym można jej wstawić opcjonalny parametr

paginate($page, $max_pages, OPCJA);

Który może wynosić 2, 3 itp ... określa ile będzie cyferek ... dla 2 będzie to od 1 do 5 , dla 3 od 1 do 7 ...
Paginator podświetla aktualną stronę, jeśli stron jest mniej niż limit to wyświetla ich mniej...

Oparty jest na listach i wyświetla listę w postaci:

  1. <div id="pagination"><ul>
  2. <li class="pgn1st"><a href="?page=1" id="paginfirstnone"><span>first</span></a></li>
  3. <li class="pgnprev"><a href="?page=1" id="paginprevnone"><span>prev</span></a></li>
  4. <li class="num"><a href="?page=1" class="active">1</a></li>
  5. <li class="num"><a href="?page=2">2</a></li>
  6. <li class="pgnnext"><a href="?page=2" id="paginnext"><span>next</span></a></li>
  7. <li class="pgnlast"><a href="?page=2" id="paginlast"><span>last</span></a></li>
  8. </ul></div>


Czyli bardzo łatwo to ostylować (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Tutaj przykład dla 14 newsów w bazie i limitu 10 na strone, więc tylko 2 podstrony (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Dodatkowo, FIRST, PREV , LAST, NEXT mają style z dopiskiem none gdy już nie ma dalszych stron do wyświetlenia (np jeśli znajdujemy się na stronie 9 z 9 to dalej już nie będzie NEXT i LAST ... można wtedy je ostylować jako szare lub display:none)
FIRST PREV NEXT LAST są w SPAN, by można było je zastąpić obrazkami (wtedy dla spanów display:none)

Linki w postaci jakasstrona.php?page=1


Skrypt jak widać amatorski, ale u mnie działa ... jak się podszkolę to napiszę sobie lepszy, na razie ten musi starczyć (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował barat 17.08.2007, 11:46:20
Go to the top of the page
+Quote Post
winnetu
post
Post #3





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 2.12.2005
Skąd: Brodnica :)

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


Yyyy ja jestem bardzo początkujący. Teraz mam zadanie na weekend, przeanalizować i zrozumieć Twój kod, bo narazie to czarna magia (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
barat
post
Post #4





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 19.05.2007

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


W sumie powinno zadziałać bez niczego...

Zamień tylko news na gal oraz order by news_id na id w zapytaniach SQL i powinno śmigać (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
w $show_limit ustaw sobie ile ma być fotek na stronie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

czyli na samej górze funkcja

potem pierwszy kod (ten do liczenia)
potem zapytanie SQL wyciągające newsy
potem Twój kod wyświetlajacy galerie (zapewne masz to w jakiejś pętli)
na końcu

<?php
paginate($page, $max_pages);
?>

i linki w postaci galeria.php?page=1 (zamiast galeria.php moze być dowolna inna nazwa, na przykład jakasstrona.php - w zależności jak się nazywa Twój plik z galerią))

Ten post edytował barat 17.08.2007, 12:37:35
Go to the top of the page
+Quote Post

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: 25.08.2025 - 10:50