Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/MYSQL] stronicowanie
Forum PHP.pl > Forum > Przedszkole
sumek
Witam wiem że temat był poruszany setki razy przeglądałem forum szukałem ale nie umiem sobie poradzić.

chodzi o stronicowanie typu: poprzednia [1][2][3]...[8][9][10] następna

znalazłem post o Pagerze ale nie czaje tego tongue.gif a jak zacząlem kombinować to nic nie wypaliło, z góry mówię że to początki smile.gif.

Może pokażę co mam i co z tego pójdzie zrobić, z góry dzięki za pomoc.

  1. <?php
  2. include("config.php");
  3.  
  4. $query = mysql_query('SELECT * FROM cms_news');
  5.  
  6. $ile = mysql_num_rows($query);
  7. $na_strone = 5;
  8. $stron = ceil ($ile / $na_strone);
  9.  
  10. if (!isset($_GET['strona'])) $strona = 1; else $strona = (int)$_GET['strona'];
  11. $query = mysql_query ('SELECT * FROM cms_news ORDER BY id DESC LIMIT '.(($strona-1)*$na_strone).','.$na_strone.'');
  12.  
  13. while ($pokaz=mysql_fetch_array($query)) {
  14. $temat=$pokaz['temat'];
  15.  
  16. echo"<div> + ".$temat."</div>
  17. ";
  18.  
  19. }
  20. if($_GET['strona']>1){ 
  21. echo '<a href="stronic.php?strona='.($_GET['strona']-1).'">Poprzednia</a> ';
  22. }
  23.  
  24. for($i = 0;$i<= $stron-1;$i++){
  25.  
  26.  if($i==$strona-1){ echo '[ '.($strona).' ]'; }else{ echo '<a href="stronic.php?strona='.($i+1).'">[ '.($i+1).' ]</a> '; }
  27. } 
  28.  
  29. if($_GET['strona'] < $stron){ 
  30.  echo ' <a href="stronic.php?strona='.($_GET['strona']+1).'">Następna</a>';
  31. }
  32. ?>
potreb
Jak chcesz możesz zastosować np taki sposób:

  1. <?php
  2. function pages ($first, $countpages, $nrpages, $zap, $pglink) {
  3. if($countpages > $nrpages ){
  4. $countpages = $countpages/$nrpages; 
  5. $ile = ceil($countpages); 
  6.  
  7. if ($first!=0) echo("<a href=\"".$pglink."&first=" . ($first-$nrpages) . "\" title=\"Poprzednie\"><big>Ť</big></a> "); 
  8.  
  9. for ($i=1;$i<=$ile;$i++) 
  10. { 
  11.  
  12.  echo("<a href=\"".$pglink."&first=" . ($i*$nrpages-$nrpages) . "\" title=\"" . ($i*$nrpages-($nrpages-1)) . "-" . ($i*$nrpages) ."\">");
  13.  
  14.  if ($first==($i*$nrpages-$nrpages)) 
  15.  { 
  16.  echo ("<b>|" . $i . "|</b></a> "); $akt=$i; } else { print ("|" . $i . "|</a> "); 
  17.  } 
  18. } 
  19.  
  20. if ($akt<$ile) echo ("<a href=\"".$pglink."&first=" . ($first+$nrpages) . "\" title=\"Następne\"><big>ť</big></a>");
  21. }
  22. }
  23.  
  24. if (!isset($_GET['first'])) $first = 0;
  25. else $first = (int) $_GET['first']; 
  26. $nrpages = 2; //tu podajesz ilość wpisów do wyświetlania
  27. $pglink = "index.php?go=show"; //tu podajesz adres strony
  28. $zap = mysql_query("SELECT * FROM tabela order by id desc LIMIT $first,$nrpages;") or die(mysql_error());
  29. $countpages = mysql_num_rows(mysql_query("SELECT id FROM tabela ")); //zlicza ilość wpisów z tabeli
  30. while ($row = mysql_fetch_array($zap)) {
  31. echo '<div>'.$row['text'].'</div>'; 
  32. }
  33. echo '<div id="pager">';
  34. echo pages($first, $countpages, $nrpages, $zap, $pglink);
  35. echo '</div><div>';
  36. ?>


Możesz tą funkcję zastosować do kilku modułów.
sumek
Cytat(potreb @ 22.01.2008, 14:33:10 ) *
Jak chcesz możesz zastosować np taki sposób:

[php]function pages ($first, $countpages, $nrpages, $zap, $pglink) {
if($countpages > $nrpages ){
$countpages = $countpages/$nrpages;
$ile = ceil($countpages);

....................

Możesz tą funkcję zastosować do kilku modułów.


świetnie, tylko nie o to chodziło jak pisałem wyżej chodzi mi o poprzednia 1, 2, 3,...8, 9, 10 nastepna
nie o to żeby mi wszystkie wyświetlało. bo tak to już mam
chlebik
Nie lubie wstawiac gotowcow, ale dam kilka wskazowek:

1. Po cholere wyciagasz z bazy wszystko (SELECT *) skoro na strony wrzucasz (z tego co widac) tylko title ? Szybciej sie zladuje wszystko jak ograniczysz ilosc pobieranych danych.


2. W funkcji pobierajacej z bazy wrzuc wszystko do tablicy lub obiektu. Jak masz policzone ile lacznie rekordow zostalo zwroconych oraz ile ma byc wyswietlonych na stronie to od razu mozesz sobie policzyc liczbe stron. Wrzuc IFa, ze jesli iloscStron < np. 4 to niech wyswietli wszystkie, jesli wieszka to niech wyswietli pierwsza, druga, przedostatni i ostatnia. W srodku kropki i przechodzenie do nastepnej strony.

3. Pamietaj, ze najlepiej dodac tutaj wskaznik dla pierwszej pozycji na wyswietlanej obecnie stronie. Inaczej mowiac jesli jestes na stronie 4 to pierwszym elementem wyswietlanym na stronie (przy zalozeniu, ze na stronie wyswietlasz po 5 linkow) bedzie element o indeksie 15 (tablice indeksuja od zera), czyli bedzie to ($obecnaStrona - 1) * $ileNaStronie. Dzieki temu mozesz sobie wyswietlac cokolwiek i gdziekolwiek tylko liczac od poczatku tablicy.



Mam nadzieje, ze pomoze to troche we wpadnieciu na pomysl jak to rozwiazac - o niebo szybciej sie nauczysz jak sam to zakodujesz. Z mojej strony tylko dorzuce, ze po wybraniu danego artykulu dobrze jest zapamietac jego Indeks w sesji dla przykladu, aby mozna bylo potem wrocic do odpowiedniej strony (lub zapisac numer strony).



Pozdrawiam
Chlebik
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.