Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Jak podzielic strone
Forum PHP.pl > Forum > Przedszkole
Suule
Witam, mam kolejny problem z cyklu "klopoty poczatkujacego".
Chcialbym by nie wyswietlalo mi wszystkich rekordow z bazy np. Newsy na jednej strony, tylko by byly one podzielne co 10. A na dole strony nad stopka byly kolejno liczby 1 2 3 4 ... 10 (cos jak w googlach).
Rzecz jasna nie jest to problem by zrobic 10 podstron. biggrin.gif Ale nie o to w tym chodzi, domyslam sie ze trzeba cos pokombinowac z ID w bazie, i w linku powinno byc cos ala www.twojastrona.pl/newsy.php?id=10

Prosilbym o pomoc (jak zawsze) smile.gif
piotrooo89
polecam klase ~nospor'a http://nospor.pl/news/category/pager/
Suule
Mhm, dziekuje, ale bardziej by mi chodzilo o jakis tutorial, ale nie wiem jak to fachowo sie nazywa. smile.gif

Pozatym mam pare kolejnych pytan, czesto sie widuje strony ktore wygladaja tak samo, jedynie roznia sie trescia... i jak zwracam uwage na linka to wszystkie odwoluja sie do index.php... (nawet obecne forum). Ja osobiscie pracujac przez jakis dluzszy czas w html, wszystkie podstrony robilem oddzielnie. Ale z tego co widze wszystko mozna zrobic na jednym pliku.
Nie prosze tutaj o napisanie mi skryptu na multum linijek, jezeli ktos zna strone z tutorial albo artykulem ktory opisuje dzialanie i wykonanie takiego skryptu to chetnie go przeczytam. A jezeli komus sie nudzi to rowniez moze opowiedziec co nieco. smile.gif
Gryf
poco robić n podstron skoro można zrobić tylko "szablon"
i na nim operować poczytaj o Smarty
Pilsener
Poczytaj o stronicowaniu, na początek możesz zrobić proste "strona +1" i "strona -1". Na zachęte masz funkcję do tworzenia nawigacji:
  1. <?php
  2. function pasek($l_odp,$l_odp_nastronie,$l_odp_napasku,$a) { //funkcja tworząca nawigację
  3.   $l_odp_podz = intval($l_odp/$l_odp_nastronie)+1;
  4.   $l_odp_podz_mod = $l_odp%$l_odp_nastronie;
  5.   if($l_odp_podz_mod>0){++$l_odp_podz;}
  6.   if($a>=$l_odp_podz){$a=$l_odp_podz-1;}
  7.   if($a>1){$tablica['prev']=$a-1;}else {$tablica['prev']=0;}
  8.   if($a<=$l_odp_napasku){$koniec=$l_odp_napasku*2+2;}else{$koniec=$a+$l_odp_napasku+1;}
  9.   if($a<=$koniec-$l_odp_napasku){$star=$a-$l_odp_napasku;}
  10.   if($a>=$l_odp_podz-$l_odp_napasku){$star=$l_odp_podz-$l_odp_napasku*2-1;}
  11.   if($koniec>$l_odp_podz){$koniec=$l_odp_podz;}
  12.   if($star<1){$star=1;}
  13.   for($i=$star;$i<$koniec;++$i){
  14.      if($i<$a){$tablica[]=$i;}
  15.      if($i==$a){$tablica['active'] = $i;}
  16.      if($i>$a){$tablica[]=$i;}    
  17.   }
  18.   if($a<$l_odp_podz-1){$tablica['next']=$a+1;}else{$tablica['next']=0;}
  19.   return $tablica;
  20. }
  21. ?>
- funkcję znalazłem na tym forum i "lekko" przerobiłem. Funkcja zwraca tablicę z numerami stron w kolejności takiej, jakiej mają być wyświetlane na stronie z zaznaczeniem pierwszej, ostatniej i bieżącej. Jako parametry przyjmuje liczbę rekordów, liczbę rekordów na jedną stronę, ilość stron +/- od bieżącej strony oraz numer bieżącej strony. Wynik działania tej funkcji pozostaje upakować w kod HTML. Pobaw się tym albo napisz podobną funkcję.
Suule
Mhm, z tego co czytam i przegladam, to smarty to bardzo dobra rzecz... ale czy jedyna do stworzenia czegos takiego?
Gryf
alternatywa dla smarty tak trochę tego jest choć osobiście preferuje smarty
warty polecenia jest także OPT, ciekawy link ;]
slewin
tak na szybko tongue.gif kiedys znalazlem na jakies stronie i bangla dobrze
  1. <?php
  2. $ile = mysql_num_rows($result);  
  3. $na_strone = 10;
  4. $stron = ceil ($ile / $na_strone);  
  5. for ($i = 1; $i < $stron; $i++) echo ' <a href="?strona='.($i+1).'">strona '.($i+1).'</a> ';
  6. if (!isset($_GET['strona'])) $strona = 1; else $strona = (int)$_GET['strona'];
  7. if (!empty($button))
  8. {
  9. $result = mysql_query("SELECT * FROM news ORDER BY tytul ASC LIMIT ".(($strona-1)*$na_strone).','.$na_strone);
  10. }
  11. else
  12. {
  13. $result = mysql_query("SELECT * FROM news LIMIT ".(($strona-1)*$na_strone).','.$na_strone);
  14. }
  15. ?>

SELECT * FROM news ORDER BY tytul ASC LIMIT zmien na swoje zapytanie do bazy
jedyny problem w tym skrypcie to ze chyba nie wyświetla strony 0 lub 1 nie pamietam ale łatwo to przerobić


LUB ten skrypt plik test.php
  1. <?
  2. //Domyślne wartości, odpowiednio liczby rekordów na strone i przesunięcia
  3. $count=5;
  4. $offset=0;
  5.  
  6. //Pobranie danych z $_GET jezsli ustawione
  7. if(isset($_GET['count']))$count = $_GET['count'];
  8. if(isset($_GET['offset']))$offset = $count*$_GET['offset']; //numer strony
  9.  
  10. //Pobranie liczby rekordów
  11. $sql = 'Select count(*) from news';
  12. $result = mysql_query($sql);
  13. $r = mysql_fetch_array($result);
  14. //Liczba stron, użycie ceil - zaokrąglenie w górę, w celu zapewnienia, że żadna strona się nie straci
  15. $pages = ceil($r[0]/$count);
  16.  
  17. //Pobranie odpowieniej paczki
  18. $sql = 'Select * from news Limit '.$count.' offset '.$offset.';';
  19. $result = mysql_query($sql);
  20.  
  21. //Początek tabeli
  22. echo '<table>';
  23.  
  24.  
  25. //Pętla po wszystkich rekordach
  26. while(($row=mysql_fetch_array($result))!=NULL){
  27. echo '<tr><td><A HREF="news.php?nr='.$row['nr'].'">&gt&gt '.$row['tytul'].'</a></td></tr>
  28. <tr><td>'.$row['tresc_krotka'].'</td><tr>
  29.  
  30. ';
  31. }
  32. echo '</table>';
  33.  
  34. //Pętla po stronach
  35. for($i=0;$i<$pages;$i++){
  36. //jeśli obecna strona, nie twórz linku do strony
  37. if($i*$count==$offset){
  38. echo ''.$i.'|| ';
  39. }else{
  40. echo '<a href="test.php?count='.$count.'&offset='.$i.'">'.$i .'||</a>';
  41. }
  42. }
  43. ?>
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.