Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Stronnicowanie wyniku zapytania...
Forum PHP.pl > Forum > PHP
imm
Mam skrypt, ktory pobiera z bazy ilosc rekordow, dzieli na strony i wyswietla np tak: 1 2 3 4 5 6 7 8 9...20. Wszystko super. Moj problem polega na tym ze nie potrafie napisac skryptu, ktory by wyswietlal te numerki w taki sposob:
Klikam na 6 i chce zeby po przeladowaniu skrypt generowal: 3 4 5 6 7 8 9 10 11 12 ... 20, a teraz klikne na 12 i po przeladowaniu 9 10 11 12 13 14 15 16 17 ... 20, albo klikam na 10 i mam 7 8 9 10 11 12 13 14 15 ... 20.
Chyba to w miare jasno wyjasnilem tongue.gif. Google w ten sposob segreguje wyniki wyszukiwania.
Pozdrawiam i prosze o pomoc bo juz nie moge... tongue.gif
hwao
  1. <?php
  2.  
  3. // petal co to wysietla
  4.  
  5. if( $i == $_GET['page'] )
  6. {
  7. echo '<b>'. $i .'</b>';
  8. }
  9. else
  10. {
  11.  echo $i;
  12. }
  13. ?>
tiraeth
a najlepiej to zrobić to tak:
  1. <?
  2. // przykładowa pętla
  3. // @param $wszystkich - liczba wszystkich stron
  4. $strona = $_GET['page']; // musi byc minimum 1
  5. $zaczynamy = $strona; $zaczynamy = ($strona >= 3)?$zaczynamy-3:0;
  6. $konczymy = $strona+3;
  7. for($i=$zaczynamy; $i<$konczymy; $i++)
  8. {
  9.  echo ($i==$strona)?'<b>'.$i.'</b>&nbsp;':$i.'&nbsp;';
  10. }
  11. echo '... '.$wszystkich;
  12. ?>
imm
Widze ze nie zostalem zrozumiany tongue.gif. Nie chodzi mi o pogrubianie... tylko o jakby przesuwanie sie zakresu tych stron... np mam 1 2 3 4 5 ... 15 i klikne sobie na 4 to zamiast 1 2 3 4 5 ... 15 wyswietli mi 2 3 4 5 6 ... 15 gdzie 15 bedzie odsylalo do ostatniej strony. Nie wiem jak to wyjasnic.... Tam gdzie bedzie uzywany ten skrypt minimum bedzie 30 stron i brzydko wyglada 1 2 3 4 5 6 7 8 9 itd az do 30... chce miec 10 liczb i na koncu przykladowo ... 30 i wlasnie mam problem z tym zeby bylo caly czas 10 liczb i w zaleznosci od strony odpowiedni ich przedzial.... bede na 15 stronie to bedzie przykladowo 12 13 14 15 16 17 18 19 20 21 .... 30. Juz bardziej chyba nie moge wyjasnic tongue.gif. Chce poprostu sposob na to przesuwanie sie przedzialu w zaleznosci czy schodze w dol czy w gore...
awides
ostatnio napisałem coś takiego
  1. <?php
  2.  
  3. function naglowek_forum($id, $strona) 
  4.  {
  5.  $wynik = @mysql_query(&#092;"SELECT count(xxx) 
  6. FROM xxx
  7. WHERE xxx = '$id'&#092;");
  8.  
  9.  $ilosc_postow = mysql_result($wynik, 0, 'count(xxx)'); 
  10.  
  11.  $a = $ilosc_postow / 15;
  12.  
  13.  if (gettype($a) == 'integer') {
  14.  for($i=1; $i<=$a; $i++) {
  15.  $I = $i;
  16.  }
  17.  }
  18.  else {
  19.  for($i=1; $i<=$a+1; $i++) {
  20.  $I = $i;
  21.  }
  22.  }
  23.  
  24.  if (@ $I > 1 && @ $I < 5) {
  25. echo '<tr><td colspan=\"5\" align=\"right\">Strona: <b>'.(empty($_GET['st']) ? 1 : $_GET['st']).'</b> &nbsp;&nbsp;';
  26.  
  27. if(gettype($a) == 'integer') {
  28.  for($i=1; $i<=$a; $i++) {
  29.  $I = $i;
  30.  echo '<a href=\"index_temat.php?id='.$id.'&st='.$i.'\">[ '.$i.' ]</a>&nbsp;';
  31.  }
  32. }
  33. else {
  34.  for($i=1; $i<=$a+1; $i++) {
  35.  $I = $i;
  36.  echo '<a href=\"index_temat.php?id='.$id.'&st='.$i.'\">[ '.$i.' ]</a>&nbsp;';
  37.  }
  38. }
  39. echo '</td></tr>';
  40.  }
  41.  else if(@ $I > 4) {
  42.  #jeżeli jest wiecej niż 4 strony...
  43.  
  44. echo '<tr><td colspan=\"5\" align=\"right\">Strona: <b>'.(empty($_GET['st']) ? 1 : $_GET['st']).'</b> &nbsp;&nbsp;';
  45. $end = $I;
  46. (empty($_GET['st']) ? $start = 1 : $start = $_GET['st']);
  47.  
  48.  if($start+>= $end) {  
  49. for($i = $end-3; $i <= $end-1; $i++) {
  50. $I = $i;
  51. echo '<a href=\"index_temat.php?id='.$id.'&st='.$i.'\">[ '.$i.' ]</a>&nbsp;';
  52. }
  53. echo '... <a href=\"index_temat.php?id='.$id.'&st='.$end.'\">[ '.$end.' ]</a>&nbsp;';
  54.  }
  55.  else if($start > 1) {
  56. for($i = $start-1; $i < $start+2; $i++) {
  57. $I = $i;
  58. echo '<a href=\"index_temat.php?id='.$id.'&st='.$i.'\">[ '.$i.' ]</a>&nbsp;';
  59. }
  60. echo '... <a href=\"index_temat.php?id='.$id.'&st='.$end.'\">[ '.$end.' ]</a>&nbsp;';
  61.  } 
  62.  else {
  63. for($i = 1; $i < 4; $i++) {
  64. $I = $i;
  65. echo '<a href=\"index_temat.php?id='.$id.'&st='.$i.'\">[ '.$i.' ]</a>&nbsp;';
  66. }
  67. echo '... <a href=\"index_temat.php?id='.$id.'&st='.$end.'\">[ '.$end.' ]</a>&nbsp;';
  68.  }  
  69. echo '</td></tr>';
  70.  }
  71.  }
  72. ?>


mało skomplikowane smile.gif może to kiedyś dopracuje...
kicaj
  1. <?php
  2. // ...
  3. if (gettype($a) == 'integer')
  4. // ...
  5. ?>
Czy takie cos w tym przypadku jest potrzebne?
Przeciz wiadomo ze funkcja mysql_results" title="Zobacz w manualu PHP" target="_manual() (w tym przypadku) zwroci `integer` !?
awides
zauważ że jest dzielenie które może zwrócić double
Liko
Ja kiedys napisalem cos takiego:
  1. <?php
  2. /**
  3.  * ! Stronicowanie !
  4.  * $numNews - ilosc newsow
  5.  * $numPage - ilosc stron
  6.  * $numLimitLink - limit linkow
  7.  * $numLimitNews - ilosc newsow na strone
  8.  * $activePage - aktywna strona
  9.  * $urlMod - sciezka z / lub bez
  10.  * $pagerLink - tresc pagera.
  11.  * $offsetDB - offset bazy danych
  12.  */
  13. $pagerLink = '';
  14. $numPage = ceil( $numNews/$sysConfig['limitNewsPage'] );
  15. $activePage = isset( $sysAction[4] ) ? $sysAction[4] : 1;
  16. if( isset( $sysAction[4] ) ) $urlMod = '';
  17. else $urlMod = $sysAction[3].'/';
  18. if( $activePage > 1 ) { 
  19. $pagerLink .= '&nbsp;&lt;&lt;&nbsp;'; 
  20. $pagerLink .= '&nbsp;'.$action['info']['pager']['prev'].'&nbsp;';
  21. }
  22. if( $activePage-$sysConfig['limitNewsLinks'] > 1 ) $pagerLink .= '...';
  23. if( $activePage-$sysConfig['limitNewsLinks'] >= 1 ) $startFor=$activePage-$sysConfig['limitNewsLinks'];
  24. else $startFor = 1;
  25. if( $activePage == $numPage || $activePage+$sysConfig['limitNewsLinks'] > $numPage ) $stopFor = $numPage+1;
  26. else $stopFor = $activePage+$sysConfig['limitNewsLinks']+1;
  27. $offsetDB = $activePage*$sysConfig['limitNewsPage']-$sysConfig['limitNewsPage'];
  28. for( $i=$startFor; $i<$stopFor; $i++) {
  29. if( $i == $activePage ) $pagerLink .= '&nbsp;'.$i.'&nbsp;';
  30. else $pagerLink .= '&nbsp;'.$i.'&nbsp;'; 
  31. }
  32. if( $activePage < $numPage-$sysConfig['limitNewsLinks'] ) $pagerLink .= '...';
  33. if( $activePage < $numPage ) {
  34. $pagerLink .= '&nbsp;'.$action['info']['pager']['next'].'&nbsp;';
  35. $pagerLink .= '&nbsp;&gt;&gt;&nbsp;';
  36. }
  37. /**
  38.  * ! Koniec Stronicowanie !
  39.  */
  40. ?>


Pewnie jest błedów troche, bo jak to pisalem to jakis (rok temu) mialem mniej wiedzy.
imm
awides wielkie dzieki. Usprawnilem to troche i przystosowalem do moich potrzeb. Dziala wysmienicie smile.gif.
bartyk
ja mam podobny problem.

niestety korzystam z $_POST a wszystko obsługuję przez jeden plik.
jak można stronicować wynik w takim przypadku?
awides
z $_POST tzn ?

jeżeli dobrze zrozumiałem to przekazujesz nr strony, id w $_POST jeżeli tak to wystarczy zamienić $_GET['st'] -> $strona
dane:
  1. <?php
  2. id = $_POST['xxx'];
  3. $strona = $_POST['xxx'];
  4. ?>
bartyk
awides,

mówiąc dokładniej przekazuje parametry zapytania i wysyłam przez $_POST. Ładuje mi osobny template, który wypełniam wynikiem zapytania. Pierwsza strona jest OK. Problem jest ze zmiana strony - zawartość $_POST nie jest już dalej przekazywana sad.gif

jakiś pomysł ?
awides
java + cookies

1. wstawiasz kod:
  1. function zapiszCookie(tryb)
  2. {
  3. document.cookie = "st=" + tryb + "; path=/; expires=Mon, 7 Mar 2038 00:00:00 GMT;";
  4. }
  5.  
  6. function strona(st, id)
  7. {
  8. zapiszCookie(id);
  9. window.open(st, '_self');
  10. }

2. inicjujesz cookie jezeli go nie ma
  1. <?php
  2. function naglowek_forum($id) 
  3. {
  4. (empty($_COOKIE['st']) ? $_COOKIE['st'] = 1 : '' );
  5.  
  6. //...
  7. }
  8. ?>

3. linki typu:
  1. <?php
  2. echo '<a href=\"strona('index_temat.php, $i)...
  3. ?>


ogólnie coś takiego, dodaj do tego jeszcze id, ide bo mam *** nauki

(nie wiem czy to bedzie dzialac)
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.