Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: inny format stronicowania
Forum PHP.pl > Forum > PHP
mb83
Witam
mam taki oto kod stronicowania
  1. for($str=1; $str<=$stron; $str++){
  2. if($page != $stron){
  3. echo(' <a href="?page='.$str.'" class="b1">'.$str.'</a>');
  4. }
  5. else{
  6. echo(' <a href="page='.$str.'" class="b2">'.$str.'</a>');}
  7. }

i wyświetla on wszystkie strony:
  1. [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]


a chcę by wyświetlał tak

  1. [1] [2] [3] ... [8] [9] [10]


jak zmienić ten kod aby tak wyświetlał?

dzięki za pomoc
matiit
  1. if ($stron >=7)
  2. {
  3. for ($str=1;$str<=3;$str++)
  4. {
  5. echo(' <a href="?page='.$str.'" class="b1">'.$str.'</a>');
  6. }
  7. echo '...';
  8. for($str=$stron-3;$str<=stron;$str++)
  9. {
  10. if($page != $stron){
  11. echo(' <a href="?page='.$str.'" class="b1">'.$str.'</a>');
  12. }
  13. else{
  14. echo(' <a href="page='.$str.'" class="b2">'.$str.'</a>');}
  15. }
  16. }
  17. }
  18. else{
  19. for($str=1; $str<=$stron; $str++){
  20. if($page != $stron){
  21. echo(' <a href="?page='.$str.'" class="b1">'.$str.'</a>');
  22. }
  23. else{
  24. echo(' <a href="page='.$str.'" class="b2">'.$str.'</a>');}
  25. }
  26. }


Tylko mogą być błędy składniowe, z '{' itd bo niewygodnie się pisze kod w okienku odpowiedzi smile.gif
Pilsener
1. Mieszasz logikę z HTMLem
2. Mają się pokazywać 3 pierwsze i 3 ostatnie numery stron? To jak będzie wyglądała nawigacja po stronach środkowych? Moim zdaniem chcesz uzyskać efekt standardowy, czyli stałą szerokość paska nawigacyjnego, gdzie np. dla aktualnej strony 10 będą pokazywały się trzy sąsiednie z każdej strony, coś w rodzaju:
Cytat
<<< poprzednia - 7 8 9 10 11 12 13 - następna >>>


Użyj np. takiej funkcji:
  1. function pasek_nawigacyjny($l_odp,$l_odp_nastronie,$l_odp_napasku,$a) { //funkcja tworząca nawigację
  2. $l_odp_podz = intval($l_odp/$l_odp_nastronie)+1;
  3. $l_odp_podz_mod = $l_odp%$l_odp_nastronie;
  4. if($l_odp_podz_mod>0){++$l_odp_podz;}
  5. if($a>=$l_odp_podz){$a=$l_odp_podz-1;}
  6. if($a>1){$tablica['prev']=$a-1;}else {$tablica['prev']=0;}
  7. if($a<=$l_odp_napasku){$koniec=$l_odp_napasku*2+2;}else{$koniec=$a+$l_odp_napasku+1;}
  8. if($a<=$koniec-$l_odp_napasku){$star=$a-$l_odp_napasku;}
  9. if($a>=$l_odp_podz-$l_odp_napasku){$star=$l_odp_podz-$l_odp_napasku*2-1;}
  10. if($koniec>$l_odp_podz){$koniec=$l_odp_podz;}
  11. if($star<1){$star=1;}
  12. for($i=$star;$i<$koniec;++$i){
  13. if($i<$a){$tablica[]=$i;}
  14. if($i==$a){$tablica['active'] = $i;}
  15. if($i>$a){$tablica[]=$i;}
  16. }
  17. if($a<$l_odp_podz-1){$tablica['next']=$a+1;}else{$tablica['next']=0;}
  18. return $tablica;
  19. }


Która zwróci gotową tablicę stron, z zaznaczeniem poprzedniej, następnej i bieżącej. Tablicę wystarczy połączyć z HTML i gotowe. Argumenty funkcji to: liczba rekordów, liczba rekordów na jedną stronę, rozmiar paska i numer aktualnej strony.

Tego samego algorytmu używa google w swojej wyszukiwarce smile.gif A przynajmniej taką mam nadzieję Lkingsmiley.png
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.