![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 20.06.2002 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Mam problem z porcjowaniem wyników zapytania na "zasadzie Google" - czyli przez 1,2,3 itp. Nigdzie nie znalazłem żadnej porady na ten temat, szczególnie jeśli chodzi o porcjowanie z użyciem MySQL. W moim skrypcie zlepilem pare znalezionych przykladów i... wyszlo, ale jednak nie do konca. Oto fragmenty mojej rzezby... <?php if(($s=="") && ($e=="")){ $s="0"; $e="10"; } // to oczywiscie argumenty do LIMIT w MySQL... // dalej zabawa z zapytaniami w MySQL, wlacznie z wyliczeniem liczby rekordow = $ile // no i wlasciwa czesc skryptu...: if($ile > $s){ $s=$s+10; $ile_row=$ile/10; $ile_row=floor($ile_row); $azdo=$ile_row; for ($aa=0;$aa<=$azdo;$aa++){ $razy_row = $aa*10; $razy_row1 = $aa; $aa1=$aa+1; echo "<a href="costam.php">[$aa1]</a>"; } } ?> Gdzie problem? Wszystko jest OK, w momencie gdy przy wyliczaniu ilosci "podzielnikow" wychodzi okragla liczba. Zgodnie ze skryptem, nastepuje inkrementacja tej wartosci i stworzenie kolejnego podzielnika z linkiem, gdzie de facto nic nie ma! Probowalem uciec od tego na wiele sposobow - wszytkie okazaly sie zawodne - tzn. problem moze i znikal, ale wzamian pojawial sie nastepny (np. skrypt nie widzial ostatniej czesci wynikow zapytania). Co zrobic? I druga sprawa: w jaki sposob wyswietlac tylko okreslona liczbe "podzielnikow" - tzn. np po 5: <1 | 2 | 3 | 4 | 5> i w wypadku wyzszych <4 | 5 | 6 | 7 | 8> Z góry dzięki za KAŻDĄ pomoc. Pozdrawiam Jurek |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 211 Pomógł: 0 Dołączył: 7.06.2002 Ostrzeżenie: (0%) ![]() ![]() |
taki sam przyklad jest na tej podstronie:
http://www.bastek.tvs.pl/porady_show.php3?...?show=porada_31 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 20.06.2002 Ostrzeżenie: (0%) ![]() ![]() |
Jak ten, jak nie ten? Tamten nie uwzglednie porcjowania "google" tylko najbardziej prymitywny podzial
![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: -- Skąd: 50° 30' N, 22° 7' E Ostrzeżenie: (0%) ![]() ![]() |
Oto masz gotowy [napisany przeze mnie] skrypt, który służy do tego celu. Zapewniam, że ZAWSZE działa, przy czym, jak linków jest za dużo, wyświetla tylko końcowy, początkowy, oraz linki wokół tego, który jest aktualnie wyświetlany.
Kod function x($link, $num, $page){
if(strpos($link, "?") == 0){ return " <a href="".$link."?from=".$num."">".$page."</a> "; }else{ return " <a href="".$link."&from=".$num."">".$page."</a> "; } } function GetPagesCount($options, $per_page){ $mod = $options % $per_page; $a = $options - $mod; $b = $a / $per_page; if($mod > 0){ $c = 1; }else{ $c = 0; } return $b + $c; } function StartLastPage($options, $per_page){ $mod = $options % $per_page; $a = $options - $mod; $b = $a / $per_page; if($mod > 0){ return $a + 1; }else{ return $a - ($per_page-1); } } function MakePages($options, $per_page, $active, $link){ $mod = $options % $per_page; $a = $options - $mod; $b = $a / $per_page; if($mod > 0){ $c = 1; }else{ $c = 0; } $rt[0] = $b + $c; if($b+$c > 5){ $b = $b-1; $links = x($link, 1, 1); if($active > 3){ $links .= "... "; $links .= x($link, $per_page*($active-1), $active-1); $links .= x($link, $per_page*$active, $active); if($active < $b + $c){ $links .= x($link, $per_page*(1+$active), $active+1); } }else{ $links .= x($link, $per_page, 2); $links .= x($link, $per_page*2, 3); $links .= x($link, $per_page*3, 4); } if($active < $b + $c-1){ $links .= "... "; $links .= x($link, $per_page * ($b + $c), $b + $c); } }else{ for($i = 1; $i <= $b+$c; $i++){ $link_num = $per_page*($i-1); if($i == 1){ $link_num++; }else{ $link_num++; } $links .= x($link, $link_num, $i); } } $rt[1] = $links; return $rt; } Funkcja X jest wewnętrzną funkcją, lecz umieściłem ją na zewnątrz, bo w przeciwnym wypadku, gdy 2 razy wywołałeś tę funkcję, to wywalało błąd. Pozostałe funkcje: GetPagesCount - wylicza, ile jest stron wyników. Jako pierwszy parametr podajesz ilość wyników, a jako drugi ilość wyników na stronę. StartLastPage - Podaje numer pierwszego wyniku na ostatniej stronie. Parametry te same. MakePages - Przygotowuje listę stron wyników. Jako parametry pobiera kolejno: options - Ilość wyników; per_page - ilość wyników na stronę; active - nie pamiętam dokładnie, ale najprawdopodobniej oznacza to aktualna stronę. Jeśli nie, to pierwszy wynik na danej stronie; link - Wygląd linka, do którego ma prowadzić każda strona. Jeśli np podamy "index.php?action=show", to zostanie do niego dołączony parametr from=numer_pozycji_od_ktorego_ma_zaczac_wyswietlac_aktualna_strone. I jeszcze: jak określić, od którego wyniku do którego ma wyświetlać wyniki (to wstawiamy do skryptu, który ma wyświetlić wyniki): Kod $cnt = count($tablica_wynikow);
$buf = $cnt; if(!isset($from)){ $from = 1; } if($cnt > $tpp){ $limit = $cnt - $from; if($limit > $tpp){ $limit = $tpp; }elseif($limit < $tpp){ $limit++; } }else{ $limit = $cnt; } /* A potem wywołanie pętli FOR wyświetlającej wyniki, jeśli pierwszy element tabeli wyników ma indeks 1: */ if($cnt > 0){ // Gdy są jakieś wyniki for($i = $from; $i <= $from+$limit-1; $i++){ // Kod wyświetlający wyniki } }else{ // Gdy nie ma wyników } Mam nadzieję, że to powinno pomóc. -------------------- PozDrX, ZyxwvU
www.anarda.host.sk Tamta zhackowana :) |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zablokowani Postów: 34 Pomógł: 0 Dołączył: 7.06.2002 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
JEzeli nadal problem aktualny to zajrzyj na http://php.pd.pl/index.php?dir=8&engine=16...&artykuly_id=32 oraz http://php.pd.pl/index.php?dir=8&engine=16...&artykuly_id=63
Pozdro |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 335 Pomógł: 6 Dołączył: 7.03.2002 Ostrzeżenie: (0%) ![]() ![]() |
Ja swego czasu napisalem cos takiego:
Kod function page_index(){
global $HTTP_GET_VARS; $show = 10; // ile ma pokazywac $result = mysql_query( "SELECT * FROM jakas_tabela"); $number = mysql_num_rows($result); $page_num = ceil($number/$show); $page = (ceil($HTTP_GET_VARS['offset']/$show)+1); $index = "<b>".$page."</b>"; for($i = 1; $i <= $page_num; $i++){ if( $page != $i ){ $j = ($i- 1) * $show; $tmp .= "<a href="?offset=$j">$i</a> "; } } if( $page_num != 1 ) $index .= " [ $tmp ]"; return $index; // tutaj funkcja zwraca indexy stron } |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 11:52 |