ďťż
Podstrony
|
telcocafemam duzo news'ow na stronie i chce aby nie wyswietlaly sie wszystkie (aby nie trzeba bylo przewijac 2km w dol) tylko zeby to podzielic na kilka podstroncos w stylu [1], [2], [3] ... itd ma robic sie to automatycznie po przekroczeniu np 30 newsow nie wiem jak to nazwac dlatego pewnie nic nie moge znalezc w necie na ten temat function Pages($page,$ile,$max,$url,$type=0) { global $lang; $all = ceil($ile / $max); $out = ''; #URL - usuń lub zmień ten fragment, jeżeli używasz mod_rewrite $url .= '&page='; #Select if($type) { $out = '<select onchange="location=\''.$url.'\'+(this.selectedIndex+1)" >'; for($i=1; $i<=$all; ++$i) { $out.='<option'.(($page==$i)?' selected="selected"':'').'>'.$i.'</option>' ; } return $out.'</select> '.$lang['of'].$all; } else { for($i=1; $i<=$all; ++$i) { if($all > 9 && $i > 1) { if($i+2 < $page) { $i = $page-2; } elseif($i-2 > $page) { $i = $all; } } $out.='<a class="'.(($page==$i)?'pageAct':'').'" href="'.$url.$i.'">'.$i.'</a>'; } return $out; } } //Teraz jak to wygląda w praktyce - zamiast $_GET['page'] może być np. $URL[1] lub inna zmienna if(isset($_GET['page']) && is_numeric($_GET['page'] && $_GET['page'] != 1) { $page = $_GET['page']; $start = ($page-1)*30; } else { $page = 1; $start = 0; } //W zapytaniu do bazy danych teraz stosujesz komendę LIMIT, np. LIMIT 0,10 //gdzie 0 = $start, a 10 = ilość newsów //najlepiej użyć mechanizmu podpinania - koniecznie bindValue z 3 parametrem - PDO::PARAM_INT //Generuj stronicowanie $pages = Pages($page, $total, 10, 'adres_url'); W kodzie HTML teraz po prostu wywołaj funkcję Pages:<div class="pages"><?= $pages ?></div> W kodzie CSS zdefiniuj klasę .pages dla <div> oraz .pageAct dla aktywnej strony <a>. Użytkownik Ferrari edytował ten post 17 sierpień 2009, 16:08 Jakaś funkcja, która coś robi, lecz nie wszystko, wyrwana z "jakiegoś" skryptu i nie za bardzo wyjaśnia chyba pytającemu koncepcję stronicowania. Nie jest to najlepsze rozwiązanie jako że miesza kod HTML z PHP, oraz dla każdego przypadku stronicowania na stronie trzeba powtarzać ten sam kod z drobnymi modyfikacjami. Stronicowanie generalnie polega na: - pobraniu ilości wpisów w bazie (ilości newsów). - ilość newsów dzielimy przez ilość newsów na stronie - mamy listę stron. Możemy za pomocą pętli wygenerować listę [1], [2] stron --- każdy link stosowany na liście stron [1][2] kieruje na danastrona.php?strona=$NUMER_STRONY - tak by [1] kierowało na ?strona=1 itd. - pobieramy listę newsów - tyle ile chcemy mieć na stronie LIMIT ileś - jeżeli w $_GET jest "strona" i ma wartość numeryczną to zapytanie wykonujemy nieco inne: LIMIT $X ileś gdzie $X to wartość $_GET['strona']*ileś (pomijamy tyle newsów) :) tak to generalnie działa W przypadku frameworków (CI, Kohana, CakePHP, Django...) mamy gotową klasę, API, która bez powtarzania kodu zajmuje się stronicowaniem ("automatycznie" generując listę stron, czy odpowiadając za pobieranie wyników z określonej strony), co jest znacznie lepszym rozwiązaniem od takiej funkcji. Użytkownik Riklaunim edytował ten post 17 sierpień 2009, 19:42 |
|||
Sitedesign by AltusUmbrae. |