http://nospor.pl/pager.html
http://nospor.pl/download/idfolder/20/
Hejka, prezentuję klasę Pager. Umożliwia ona wygenerowanie pager'a oraz pobranie aktualnych indexów rekordów.
Użycie jest proste:
<?php $pager = new Pager('idPagera'); //okreslenie liczby wszystkich rekordów na 500 $pager->SetTotalRecords(500); http://www.php.net/echo $pager->Render();//wyswietlenie pagera ?>
<?php $sql = 'select count(*) from TABLE'; $result = http://www.php.net/mysql_query($sql); $row = http://www.php.net/mysql_fetch_array($result); $recordsCount = $row[0];//pobranie liczby rekordów $pager = new Pager('idPagera'); $pager->SetTotalRecords($recordsCount);//ustawienie liczby rekordów //wygenerowanie pagera i zapamietanie go w zmiennej w celu //pozniejszego wyswietlenia $renderPager = $pager->Render(); $start = $pager->GetIndexRecordStart();//pobranie indexu rekordu początkowego $end = $pager->GetIndexRecordEnd();//pobranie indexu rekordu koncowego //zapytanie z uwzglenieniem stronicowania $sql = 'select * from TABLE limit '.$start.','.($end - $start + 1); //...pobranie wyników i ich wyswietlenie http://www.php.net/echo $renderPager; //wyswietlenie pager'a ?>
<?php http://www.php.net/echo $pager->Render(true); ?>
<?php $pager = new Pager('idPagera', 'wszystkie_numery_#PAGE#'); ?>
Rozwiązanie bez wątpienia warte uwagi, ale po sesjach widać, że nie pracujesz na E_ALL - gdy nie zostanie wywołana sesja (session_start) wszelkie odwołania do $_SESSION będą powodować błąd E_NOTICE.
Poza tym powinieneś dać możliwość wyłączenia tej funkcji.
Poza tym co w przypoadku, gdy skrypt będzie działał przez mod_rewrite (np. na stronie: ./get-art-143.xml => ./index.php?act=get&co=art&id=143) przy założeniu, że JS został wyłączony?
@Bakus
Widzę że kod przeanalizowales dokladnie . Dziękuję za zainteresowanie i cenne uwagi. Faktycznie, system obslugi bledów mam inny i E_NOTICE nie widze.
Problem z brakiem sesji juz rozwiązałem i przeedytowalem klasę.
Co do możliwości wyłączenia zapisu w sesji - już jest
Co do js to zapomnialem dodać, iż jest wymagane Oczywiscie w przypadku gdy pager korzystać będzie z formualrza. Gdy z linków to js nie jest potrzebne.
mod_rewrite: hmmm. Nie używalem Pagera do tego typu metod, wiec nie myslalem nad rozwiązaniem. Może w wolnej chwili.
Przydał by się jeszcze jeden mały bajer: "połamanie linii"... by kod nie przenosił się do następnych linijek (powoduje to błędy w numerowaniu linii)
mówisz - masz
cudo
Mam kod ktory pobiera dane z bazy mysql (w tablicy) i wyswietla (while), jak to podpiac do tego
(jestem poczatkujacy i nie kumam ocb znaczy jakj to zrobic :])
Masz wszystko przecież jak wół napisane.
wydaje mi sie ze klasa generuje kod HTMl niezgodny ze standardem,
powinno byc & zamiast &
@OnE.Killer odpowiedzialem tutaj:
http://forum.php.pl/index.php?act=ST&f=27&t=35749&st=0#entry202136
@AxZx hmm, szczerze powiedziawszy nie wiem czy to zgodne ze standardem czy nie. Ale to przecież zaden problem podmienić & na & . Występuje to tylko w jednym miejscu (linia 114)
Ale dzięki za info
wiem ze mozna samemu sobie zmienic, ale czemu ty nie mozesz tego zrobic? zeby ten kto bedzie uzywal od razu mial gotowa elegancko klase w ktorej nic nie trzeba zmieniac:)
wiadomo - twoja wola.
a mam takie pytanie
czy nie lepiej by bylo gdyby np przy 10 podstronie widoczne byly linki do stron nastepnych i poprzednich?
np 5 poprzednich i 5 nastepnych, bo teraz jest tak ze jest 10 stron i koniec, tylko strzalki w prawo sa.
http://www.w3.org/
sprawdz strony z Twoim stronicowaniem w walidatorze, wyswirtli error w miejscu &
a co do linkow to chodzi mi o cyfry
teraz jest
aha, już czaję o co ci chodzi. Chcesz by aktualna strona była po środu wyswietlanych. Nie, teraz tego nie ma. Leci pakietami czyli co 10 (domyślnie, można regulować dlugosc tego "pakietu" ). W sumie funkcjonalność ciekawa. Być może dorobie w wolnej chwili. Będzie wówczas się mówiło czy chce się tak, czy inaczej.
Dzięki za sugestie, jak pisałem mile widziane są
Co do & to juz poprawiłem .
a jeszcze mam takie pytanie, chociaz nie wiem czy jest to mozliwe bo w swojej klasie nie udalo mi sie tego osiagnac
chodzi o mod_rewrite:)
jak juz ktos wspominal, czy daloby sie to zrobic?
mam np branza.1
i teraz chcialbym branza.1.1
branza.1.2
itd
to w czym to mam zrobic?
he? Czy Twoje pytanie ma związek z Pager'em? Bo ja ni w ząb nie kumam. Co to ma byc te branża.1, branza.1.1, branza.1.2 ?
branza.1.2
1 to numer branzy
a 2 to numer strony:)
chcialbym aby wlasnie taki link generowal pager, i dlatego pytam sie czy da sie to jakos rozwiazac.
O, i nie można było tak od razu ?
Teraz wszystko kumam
Link da sie wygenerować po bardzo małej przeróbce. Gorzej z odebraniem danych z linku.
Teraz jestem dość mocno zajęty i nie mam czasu by pobawić sie mod rewrite. W wolnej chwili uwzględnie to w pagerze, ale naprawde nie wiem kiedy będzie ta wolna chwila
A moze dodac dodatkowa klase do generowania linku: podajesz jej numer strony, liczbe stron (+inne) i za jej pomoca generujesz dowonle linki, z mod_rewrite czy bez.
dobry pomysl
tylko nie kazdy jest takim geniuszem i nie kazdy wie jaka funkcjonalnosc powinna miec taka klasa.
Heh, przeciez opisalem funkcjonalnosc tej klasy.
<?php function _createLink($title, $page, $text) { TUTAJ zamiast tworzyc linka w metodzie, przekazujesz $title, $page, $text obiektowi innej klasy odpowiedzialnego tylko za tworzenie linka. Obiekt ten przekazujesz przy tworzeniu nowego Pager. Zeby zmienic typ linkow wymieniasz tylko obiekt generujacy linki. PHP5: az sie prosi o interfejs. } ?>
Z tą nową klasą to chyba lekka przesada. Aż tyle rzeczy w generowaniu linka nie ma, by tworzyc do tego nową klasę. Wystarczy wzbogacic funkcję _createLink o dodatkową możliwośc i to wszystko. Dojdzie maly bajer i tyle. Nie przesadzajmy.
Funkcję te wzbogace, przy odrobinie czasu jak pisalem.
Pierwsza klasa zwraca obiekt/tablice z danymi, ktore daja podstawe do wyswietlenia tych danych w sposob, ktory nam najbardziej odpowiada. Zamykanie kodu html w klasie, ktora `wylicza` stronicowanie jest malo uniwersalne. Jesli tworzymy juz klase to po to by ja wszedzie wykorzystac.. a nie nagle musimy grzebac w jej srodku bo np. chcemy uzyc obrazkow w szczelkach.
czy trwaja prace nad rozbudowa skryptu?
NIestety nie. Powód ciągle ten sam
Na przyszłość tego typu pytania prosze kierować na PW (wkoncu taki post nic nie wnosi do tematu. a jakby byla nowa wersj to bym ją umiescil)
Czy wiecie jak zrobić/zodyfikować pagera, aby chodził na PDO?
Probuje cos wykombinować, ale opornie mi to wychodzi.
pytasz juz o to tutaj: http://forum.php.pl/index.php?showtopic=39186&st=0&#entry218370
uwazaj, bo to podchodzi pod crossposting
PDO nie uzywalem nigdy. ale jak teraz patrze na jego zestaw funckji to jest tam wykonanie zapytania i pobieranie rekordow. nie wiem wiec w czym problem?zamiast mysql_query wywolyjuesz query PDO
A jak zastosowac pagera przy template'ach ? Przykladowo OPT ?
kurka, jakis dziwny jestem. OPT tez nie uzywalem
Ale jak to szablon. W php tworzysz obiekt pagera, generujesz odpowiednie zapytanie tak jak podalem w przykladzie. Do szablonu przekazujesz wynik metody $pager->render(); oraz rzucasz rekordy.
No chyba ze ci ocos innego chodzi
Jednak sobie poradzilem ze stronicowaniem w PDO
Problem polegal na tym ,ze $stmt->rowCount() nie dziala poprawnie.
Jesli poprawimy pager na:
<?php //polaczenie z baza try { $db=new PDO('mysql:dbname=table;host=localhost','uzytkownik','haslo'); } catch (PDOException $e) { http://www.php.net/echo 'Brak dostępu do baz danych: '.$e->getMessage(); } $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); ?> <?php // zapytanie o ilosc rekordów $stmt = $db->prepare( "SELECT count(*) FROM table" ); $stmt->execute(); while($row=$stmt->fetch()) { $ilosc=$row[0]; } $recordsCount = $ilosc;//pobranie liczby rekordów $pager = new Pager('idPagera'); $pager->setRecordsCount($recordsCount);//ustawienie liczby rekordów //wygenerowanie pagera i zapamietanie go w zmiennej w celu //pozniejszego wyswietlenia $renderPager = $pager->render(); $start = $pager->getStartRecord();//pobranie indexu rekordu początkowego $end = $pager->getEndRecord();//pobranie indexu rekordu koncowego //ustawnienie zmiennej $koniec : LIMIT ($start,->$koniec<-) $koniec = $end - $start + 1; //zapytanie z uwzglenieniem stronicowania //...pobranie wyników i ich wyswietlenie $stmt=$db->prepare("SELECT Kolumna FROM table LIMIT $start, $koniec"); $stmt->execute(); $stmt->bindColumn("Kolumna", $kolumna); while($stmt->fetch(PDO::FETCH_BOUND)) { http://www.php.net/echo $kolumna."<br>"; } http://www.php.net/echo $renderPager; //wyswietlenie pager'a ?>
w sumie racja
ale najwazniesze ze chodzi.
Za nabijanie postow sa ostrzezenia.... - NuLL
@nospor -> Z przeczytanych postow dowiedzialem sie ze dokonales pewnych malych poprawek w pierwotnie opublikowanej klasie. Czy klasa zamieszczona w pierwszym poscie jest aktualna wersja Twojej klasy? Jesli mam ja przetestowac to wolalbym to robic na ostatniej wersji aby sie nie zmagac z ewentualnymi, poprawionymi juz bledami.
tak. pierwszy post byl na bieząco aktualizowany (ale prosilem - na PW takie pytania ). tutaj walic uwagi, pytania dotyczace konkretnych rzeczy
---
nospor
Kilka uwag.
Styl kododwania:
Pomieszanie kodu logicznego z warstwa prezentacji np. funkcja render. Ja bym sie starał wszystko doprowadzic do postaci np. tablicy, a nastepnie stworzyl funkcje przetwarzajaca te tablice do postaci html. Uzytkownik mialby do wyboru pobranie gotowego kodu html lub np. poszczegolnych elementow ktore umieszczalby pomiedzy kodem html (np. w postaci tablicy numery stron i gotowe spreparowane urle) Formularz przechowujacy odpowiednie zmienne, niewidoczny dla uzytkownika moglby byc od razu wygenerowany - znaczy sie jego naglowek (no tu widze pewien problem ale to jest jeszcze do przemyslenia) w kazdym razie chodzi o mozliwie najwieksze wydzielenie warstwy prezentacji od warstwy logicznej. Mozna pomyslec o zrobieniu klasy dziedziczacej sluzacej tylko i wylacznie do generowania kodu html. Wtakiej sytuacji moglbys stworzyc kilka wersji klasy potomnej odpowiedzialnej za wyglad pagera. Aha kod domyslny html powinien moim zdaniem oprocz linkow do stron, zawierac tez informacje o ogolnej liczbie rekordow, liczbie rekordow na stronie i ktore to sa bo tak to czesc kodu html dostaje od razu a czesc musze sobie dorobic.
Niejednolite nazewnictwo raz $nazwa_zmiennej a innym razem $nazwaZmiennej i to bez uzasadnienia. Przynajmniej nie dojrzalem szczegolnego powodu.
Usprawnienia:
W Twojej klasie jest jeszcze jeden mankament. Nie ma mozliwosci zmiany tekstow (Strona, Nastapna strona itd.) Powinienes odpowiednie teksty przechowywac osobno np. w zmiennej publicznej - tablicy ($aTexts = array('page' => 'Strona')) - to ulatwi ustawienie wlasnych tekstow. Oczywiscie w kodzie w takim przypadku dajesz np.:
<?php
$ret .= $this->_createLink($aTexts['page'].$i, $i, $i);
?>
Podoba mi sie dolanczanie zmiennej paginatora do danego linku. Jak to juz ktos tutaj wspomnial nie ma mozliwosci tworzenia przyjaznych linkow. Mozna by rzeczywiscie stworzyc osobna klase sluzaca do formatowania urli. Oczywiscie to co masz jest rozwiazaniem domyslnym, ale oprocz tego mozna by dolaczac odpowiednie filtry (pluginy) zmieniajace format linkow.
Co do Twoich uwag ktore funkcje uzywac najpierw, a ktore pozniej. Mozna ustawic zmienna kontrolna $bIsRendered. Nie musze pisac kiedy ustawiasz jej wartosc na true. W kazdym razie jak true to przy probie wywolania fukcji z rodzaju set dajesz komunikat bledu. Analogicznie dla get.
Skoro mamy PHP5 i Ajaxa mozna pomyslec o przyszlosci - wyzwan nie brakuje a taki paginator bylby przydatnym narzedziem.
Tyle na szybcika jak cos jeszcze dostrzege to napisze.
Witam,
mam problem z tym skryptem, gdyż nie wiem jak wymusić aby startował od danej fotki, bo u mnie to jest tak (co z ponizszego kodu powinno wyniknac) ze
najpierw wyswietla sie menu galerii (ostatni else), gdzie wybiera sie galerie ($gid)
po wybraniu wyswietlaja sie miniaturki i po kliknieciu na dowolna pokazuje sie pager, sek w tym ze nie wyswietla wskaznej fotki ($fid) tylko startuje od pierwszej... btw. $pid = id psa
oto kod mojej "galerii":
<?php include 'db_engine.php'; $pid = (int)$_GET['p']; $db = new dbengine(); $db->polacz(); if(http://www.php.net/isset($_GET['gid'])and(!http://www.php.net/isset($_GET['fid']))) { $gid = (int)$_GET['gid']; $db->DoSql("SELECT galeria_katalog FROM galerie WHERE galeria_id = $gid"); $kat = http://www.php.net/mysql_result($db->wynik,0,0); $dir = './zdjecia/'.$kat.'/mini/'; $db->DoSql("SELECT * FROM zdjecia WHERE galeria_id = $gid AND pies_id = $pid"); $res = $db->wynik; while($r=http://www.php.net/mysql_fetch_array($res)) { $fname = $r['zdjecie_plik']; $fid = $r['zdjecie_id']; $mini = $dir.$fname; //echo $fname.'<br>'.$fid.'<br>'.$mini; // sprawdza czy istnieje wpis w bazie if($fid<>0) { // sprawdza czy miniatrua istnieje if(http://www.php.net/file_exists($mini)) { $link = "<a href=\"?s=galerie&gid=$gid&fid=$fid&p=$pid\">"; http://www.php.net/echo $link."<img src=\"$mini\" border=\"1\"></a> \n"; } else // jesli nie, to ją generuje i wyswietla { http://www.php.net/echo "Brak miniatury"; } } else http://www.php.net/echo "Brak wpisu w bazie dla wybranego pliku!<br>\n"; } } elseif(http://www.php.net/isset($_GET['gid'])and(http://www.php.net/isset($_GET['fid']))) // pokazuje wybrane zdjecie { $gid = (int)$_GET['gid']; $fid = (int)$_GET['fid']; $db->DoSql("SELECT galeria_katalog FROM galerie WHERE galeria_id = $gid"); $kat = http://www.php.net/mysql_result($db->wynik,0,0); $dir = './zdjecia/'.$kat.'/'; $db->DoSql("SELECT Count(*) FROM zdjecia WHERE galeria_id = $gid AND pies_id = $pid"); $ile_zdjec = http://www.php.net/mysql_result($db->wynik,0,0); if($ile_zdjec==0) { http://www.php.net/echo "Brak zdjęć"; } else { http://www.php.net/echo '<div align="center"><a href="?s=galerie&gid='.$gid.'&p='.$pid.'">'; http://www.php.net/echo '<img src="buttony/powrotdogalerii.jpg" border="0"></a></div>'; include 'pager.php'; $pager = new Pager('galeria'); $pager->$_recordsOnPage = 1; $pager->$_startRecord = $fid; $pager->setRecordsCount($ile_zdjec); $renderPager = $pager->render(); $start = $pager->getStartRecord(); $end = $pager->getEndRecord(); $sql = 'SELECT * FROM zdjecia WHERE galeria_id = '.$gid.' AND pies_id = '.$pid.' LIMIT '.$start.','.($end - $start + 1); $db->DoSql($sql); $res=$db->wynik; while($r = http://www.php.net/mysql_fetch_array($res)) { $opis = $r['zdjecie_opis']; $plik = $r['zdjecie_plik']; http://www.php.net/echo "<br /><img src=\"$dir$plik\" border=\"1\"><br />$opis<br />"; } http://www.php.net/echo $renderPager; } } else { $db->DoSQL("SELECT * FROM galerie WHERE galeria_id <> 4"); $db->NRows; $w = $db->wynik; $n = $db->rows; while ($r=http://www.php.net/mysql_fetch_array($w)) { $id = $r['galeria_id'];; $pies = $r['pies_id']; $opis = $r['galeria_nazwa']; $img = $r['galeria_obrazek']; $scr = "<img src=\"buttony/$img\" border=\"0\" alt=\"$opis\">"; http://www.php.net/echo "<a href=\"index.php?s=galerie&gid=$id&p=$p\">".$scr."</a><br />"; } $db->rozlacz(); } ?>
To nie tak dziala
<?php $pager->$_startRecord = $fid; ?>
<?php $pager->$_recordsOnPage = 1; $pager->$_startRecord = $fid; ?>
Widać rożnicę?Dochodzi do tego jeszcze fakt ze nie mozesz przyspisac startRekord i skraca sie to do:
<?php $pager->_recordsOnPage = 1; $pager->_startRecord = $fid; ?>
<?php $pager->_recordsOnPage = 1; ?>
Hehe, wierze na słowo bo nie wiem czemu mimo zeby mnie powiadamilo o odp to nic mi nie przyszlo wiec nie zagladalem W miedzy czasie napisalem sobie to wszystko od nowa i nie korzystajac z Twojego pagera Choc zostal na ksiazce gosci, gdzie sprawuje sie znakomicie
A mój sposób? Oto on:
<?php include 'db_engine.php'; $db = new dbengine(); $db->polacz(); $pid = (int)$_GET['p']; // id psa $gid = (int)$_GET['gid']; // id galerii $eid = (int)$_GET['eid']; // koniec $cid = (int)$_GET['cid']; // wybrana fotka // pobranie zdjec $lsql = 'SELECT * FROM zdjecia WHERE galeria_id = '.$gid.' AND pies_id = '.$pid; $db->DoSql($lsql); $lres=$db->wynik; // pobranie katalogu $db->DoSql("SELECT galeria_katalog FROM galerie WHERE galeria_id = $gid"); $kat = http://www.php.net/mysql_result($db->wynik,0,0); $dir = './zdjecia/'.$kat.'/'; $dir_mini = './zdjecia/'.$kat.'/mini/'; // wypelnienie tablicy danymi $temp = http://www.php.net/array(); $count = 0; while($r = http://www.php.net/mysql_fetch_array($lres)) { $opis = $r['zdjecie_opis']; $plik = $r['zdjecie_plik']; $dane = http://www.php.net/array($count,$dir.$plik,$opis,$dir_mini.$plik); $temp[$count] = http://www.php.net/implode(',',$dane); $count++; } $lista = $temp; if(http://www.php.net/isset($_GET['gid'])and(!http://www.php.net/isset($_GET['cid']))) // wyswwietla miniatury { if($count<>0) { foreach($lista as $id) { $data = http://www.php.net/explode(',',$id); $cid = $data[0]; // id $plk = $data[1]; // plik $ops = $data[2]; // opis $min = $data[3]; // mini if(http://www.php.net/file_exists($min)) { $link = "<a href=\"?s=galerie&gid=$gid&eid=$count&cid=$cid&p=$pid\">"; http://www.php.net/echo $link."<img src=\"$min\" border=\"1\"></a> \n"; } } } else http://www.php.net/echo '<br /><img src="buttony/brakzdjec.jpg"><br /><br />'; } elseif(http://www.php.net/isset($_GET['gid'])and(http://www.php.net/isset($_GET['cid']))) // pokazuje wybrane zdjecie { $dane = $lista[$cid]; $data = http://www.php.net/explode(',',$dane); $cid = $data[0]; // id $plk = $data[1]; // plik $ops = $data[2]; // opis $min = $data[3]; // mini if(http://www.php.net/file_exists($min)) { $next=''; if($cid+1<$eid) { $ncid = $cid+1; $next ='<a href="?s=galerie&gid='.$gid.'&p='.$pid.'&cid='.$ncid.'&eid='.$count.'">'; $next.='<img src="buttony/nav_1a.jpg" border="0"></a>'; } $prev=''; if($cid-1>0) { $pcid=$cid-1; $prev='<a href="?s=galerie&gid='.$gid.'&p='.$pid.'&cid='.$pcid.'&eid='.$count.'">'; $prev.='<img src="buttony/nav_1b.jpg" border="0"></a>'; } http://www.php.net/echo '<div align="center">'.$prev; http://www.php.net/echo '<a href="?s=galerie&gid='.$gid.'&p='.$pid.'">'; http://www.php.net/echo '<img src="buttony/powrotdogalerii.jpg" border="0"></a>'; http://www.php.net/echo $next.'</div>'; http://www.php.net/echo '<img src='.$plk.' border="1"><br /><b>'.$ops.'</b>'; } } else // wyswietlenie listy galerii { $db->DoSQL("SELECT * FROM galerie WHERE galeria_id <> 4"); $db->NRows; $w = $db->wynik; $n = $db->rows; while ($r=http://www.php.net/mysql_fetch_array($w)) { $id = $r['galeria_id'];; $pies = $r['pies_id']; $opis = $r['galeria_nazwa']; $img = $r['galeria_obrazek']; $scr = "<img src=\"buttony/$img\" border=\"0\" alt=\"$opis\">"; http://www.php.net/echo "<a href=\"index.php?s=galerie&gid=$id&p=$p\">".$scr."</a><br />"; } } ?>
witam, nie moge sobie z tym poradzic, probowalem juz z 10 kodow na stronicowanie i nic :/ z tego forum z compzone.org z forum.webhelp.pl i nie umie zadnego przystosowac.. widze ze Twoja klasa cieszy sie popularnoscia, ze tak powiem ale tez nie moge jej przystosowac.. wiec mam prosbe.. czy jestes w stanie przystosowac, nospor? ew. jak ktos inny potrafi to bardzo prosze
moj kod jest taki:
<?php $dowcipy = http://www.php.net/mysql_query (" Select * From `dowcipy` Where `akt_d` = '1' and `kat_d` = '{$_GET['id_kat']}' "); $num_row = http://www.php.net/mysql_num_rows ( $dowcipy ); if ( $num_row != 0 ) { while ( $r_dowcipy = http://www.php.net/mysql_fetch_array ( $dowcipy, MYSQL_ASSOC )) { $list_dowcipy .= ( http://www.php.net/nl2br ( $r_dowcipy['tresc_d'] ) . '<br /><br />' ); } $template -> setValue ('lista_dowcipow', $list_dowcipy); } else { $template -> setValue ('lista_dowcipow', 'Brak dowcipów w kategorii.'); } ?>
NIe wiem czy ktoś zauważył ale w 128 lini jest literówka (brak znaku dolara "$" przed zmienną pon) przez którą cała klasa się sypie bo wyświetlany jest błąd
<?php $this->_pagesOnNav = $pon; ?>
@legro w pierwszym poscie masz co i jak...
<?php $sql = "select count(*) from dowcipy Where `akt_d` = '1' and `kat_d` = '{$_GET['id_kat']}' " ; $result = http://www.php.net/mysql_query($sql); $row = http://www.php.net/mysql_fetch_array($result); $num_row = $row[0];//pobranie liczby rekordów $pager = new Pager('idPagera'); $pager->setRecordsCount($num_row);//ustawienie liczby rekordów //wygenerowanie pagera i zapamietanie go w zmiennej w celu //pozniejszego wyswietlenia $renderPager = $pager->render(); $start = $pager->getStartRecord();//pobranie indexu rekordu początkowego $end = $pager->getEndRecord();//pobranie indexu rekordu koncowego //zapytanie z uwzglenieniem stronicowania $sql = "select * from dowcipy Where `akt_d` = '1' and `kat_d` = ".$_GET['id_kat']." limit ".$start.','.($end - $start + 1); //...pobranie wyników i ich wyswietlenie, czyli twoj kod: $dowcipy = http://www.php.net/mysql_query($sql); if ( $num_row != 0 ) { while ( $r_dowcipy = http://www.php.net/mysql_fetch_array ($dowcipy , MYSQL_ASSOC )) { $list_dowcipy .= ( http://www.php.net/nl2br ( $r_dowcipy['tresc_d'] ) . '<br /><br />' ); } $template -> setValue ('lista_dowcipow', $list_dowcipy); } else { $template -> setValue ('lista_dowcipow', 'Brak dowcipów w kategorii.'); } ////// http://www.php.net/echo $renderPager; //wyswietlenie pager'a ?>
@nospor - wielkie dzięki.. Działa wszystko ok, wyświetla się lista:
1 2 3 >
Ale jak chce kliknac na 2 to nic sie nie robi... Na pasku statusu pisze tylko jak najade na cyferke 2: java script:sub_function_1(2);
I nie da sie przejsc na druga strone wynikow :/
------------ EDIT
Już wiem dlaczego tak sie dzieje..
Robie tak:
<?php $template -> setValue ('pages', $renderPager); ?>
<?php http://www.php.net/echo $renderPager; ?>
Witam
Jak połaczyć pager z tym kodem wyszukiwarki?
W kodzie jest stronicowanie, ale ono niestety nie działa.
Z góry dziękuję za pomoc, nie znam się na php a bardzo mi zależy na poprawnym stronicowani.
<? $ile = http://www.php.net/mysql_num_rows(http://www.php.net/mysql_query("SELECT * FROM $ogloszenia_table $where")); $result = http://www.php.net/mysql_query("SELECT * FROM $ogloszenia_table $where LIMIT $limit,$og_limit"); while($r = http://www.php.net/mysql_fetch_array($result)){ $id = $r['id']; $cat = $r['cat']; $title = $r['title']; $img1 = $r['img1']; $date = $tbl['date']; if($img1 == '1'){ $photo = '<a href="lista.php?id='.$id.'"><img id=intro src="img/'.$id.'_1.gif" border="0" width="50px"></a>'; } else{ $photo = ''; } http://www.php.net/echo'<fieldset>'.$photo.'Fotoanons: <br /><a href="lista.php?id='.$id.'">'.$title.'</a></fieldset><br />'; } if($ile == '0'){ http://www.php.net/echo'brak wyniku'; } ?>
widze ze dales duzo rekordow na stronie: 150. wow
<?php $sql = "SELECT count(*) FROM $ogloszenia_table $where"; $result = http://www.php.net/mysql_query($sql); $row = http://www.php.net/mysql_fetch_array($result); $recordsCount = $row[0];//pobranie liczby rekordów $pager = new Pager('idPagera'); $pager->setRecordsOnPage($og_limit); $pager->setRecordsCount($recordsCount);//ustawienie liczby rekordów //wygenerowanie pagera i zapamietanie go w zmiennej w celu //pozniejszego wyswietlenia $renderPager = $pager->render(); $start = $pager->getStartRecord();//pobranie indexu rekordu początkowego $end = $pager->getEndRecord();//pobranie indexu rekordu koncowego //zapytanie z uwzglenieniem stronicowania $sql = "SELECT * FROM $ogloszenia_table $where limit ".$start.','.($end - $start + 1); $result = http://www.php.net/mysql_query($sql); while($r = http://www.php.net/mysql_fetch_array($result)){ $id = $r['id']; $cat = $r['cat']; $title = $r['title']; $img1 = $r['img1']; $date = $tbl['date']; if($img1 == '1'){ $photo = '<a href="lista.php?id='.$id.'"><img id=intro src="img/'.$id.'_1.gif" border="0" width="50px"></a>'; } else{ $photo = ''; } http://www.php.net/echo'<fieldset>'.$photo.'Fotoanons: <br /><a href="lista.php?id='.$id.'">'.$title.'</a></fieldset><br />'; } http://www.php.net/echo $renderPager; //wyswietlenie pager'a if($recordsCount == ){ http://www.php.net/echo'brak wyniku'; } ?>
świetna sprawa . ale brakuje mi tu tego co już ktoś wcześniej napisał ze jak jeste na 10 stronie powinno automatycznie przskoczyc na nastepnych 10 a nie ze trzeba kliknac na " >> " dziala szybko na 600 tys rekorach. z tym ze liczenie rekordów robie tak:
<?php $sql="SELECT COUNT(patch) as ile FROM prg WHERE patch LIKE '%$CAT%'"; $result = http://www.php.net/mysql_query($sql); $recordsCount = http://www.php.net/mysql_result($result,0,"ile"); ?>
Widzę, ze nie dacie mi spokoju z tymi pare przed i pare po od danej strony. Wprowadzilem więc poprawki w pierwszym poście na tę okoliczność
Sposób uzywania klasy nie uległ zmianie (jest kompatybilna wstecz ). Chcąc użyc nowej metody generowania linków, wystarczy wywołać metodę render() z parametrem true:
<?php http://www.php.net/echo $pager->Render(true); ?>
jeszcze zapamietywanie podstron w sesjach i bedzie perfekto
EDIT
aha mam male pytanie przy 500 tys rekordów pierwsze uruchomienie skryptu trwa długo u Was też?
tak masz racje nie mam session_start()
a co z tym 1 wolnym uruchomieniem
jestes pewien ze to chodzi o generowanie pagera? zmierz czas przed Render() i po i sprawdź czy oby na pewno to to. Na pager nie powinno miec to wplywu. No chyba ze cos jest cacheowane lub cos w tym stylu.
w smartach jest włączone cacheowonie.
Oki w sesji trzyma ale dla każdek kategorii ktora mi zliczna wartosc jest stala. trzeba definiowac id pagera ? do tego zeby dzialalo dla kazdej kategori byla wyswetlona ostatnia przegladana podstrona
wypas super robota
Dawno nic nie pisalem. Czas zmienic. A wiec jest wersja 2.0
Główne zmiany:
1) odejscie od przesylania pagera formularzem
2) zapisywanie Pagera do tablicy, z której mozna samemu wygenerowac kod html Pager'a
3) PLucie wyjatkami
4) no i obecna wersja jest pod php5. Niedlugo dorobie tez wersje pod php4.
Zapraszam do sciagania i testowania:
http://nospor.vis-maior.net/index.php?m=dwl&entry=9e60c93541cf44f1df1b1913f5cf5dee
W paczce jest kilka przykaldow, min. jak nalezy doczepic generowanie wlasnego kodu html.
Jesli zrobicie swoja funkcje generujaca kod html i bedziecie chcieli sie nia podzielic, wyslijcie mi a ja upublikuje wersje demo z wasza funkcja i wygladem pagera.
Bardzo mi sie podoba ograniczenie pracy pagera jedynie do generowania kompletu odsylaczy. Przekazujesz do obiektu pagera odpowiednie dane a on sie zajmuje tym do czego zostal stworzony. Mam tu tylko jedna uwagę. Moim zdaniem dane niezbedne do pracy pagera powinny byc przekazywane do konstruktora (np. w postaci tablicy config). Setery i getery powinny zmieniac jedynie wlasciwosci domyslne lub takie, ktore chcemy zmienic w jakim etapie pracy obiektu.
Przydalby sie jakis sposob umozliwiajacy konstruowanie przyjaznych urli. Poniewaz tzw nice urls moga miec rozny wyglad - w zaleznosci od implementacji dobrze byloby sie w tym wypadku posluzyc wzorcem strategii i wylaczyc odpowiedzialna za generowanie linkow funkcjonalnosc do osobnej klasy - routera. Uzytkownik uzywajacy przyjaznych urli moglby sobie napisac wlasnego routera implementujacego oczywiscie odpowiedni interfejs.
Tym samym wzorcem moznaby sie posluzyc w warstwie wizualnej przy konstruowaniu wiggetow. Kazda taka klasa wizualizujaca pagera mialaby przykladowo metode renderPagerBar ktora zwracalaby gotowy kod html pagera. Oczywiscie pozostawilbym tez metody dajace dostep bezposredni do danych "surowych" wygenerowanych przez pegera umozliwiajacych wspolprace danej klasy z systememi szablonow. Za dane surowe rozumiem tu:
Ja osobiscie Pager-a uzylem do pewnego projekyu i przyznam ze jest b. dobry, ale musialem sobie go trocke zmodyfikowac ...
A konkretniej to ostatnia funkcje "_createLink" w ktorej zmienilem metode twozenia linkow, otoz dodalem do klasy "public $link_format = <link>";,
gdzie <link> jest puzniej zamieniane na zmenne GET ktore sa podszebne do zmainy strony, zrobilem to bo bardzo podszebowalem zeby to wszystko bylo na ajax.
I proponuje dodanie takiej zmiany do oryginalnej klasy, na wypadek jak tos (np. ja) ma dziwne potszeby.
@nasty_psycho ale ty uzywales Pager ver 2.0? Przeciez ta wersja klasy umozliwia uzytkownikom pisanie wlasnych metod do renderowania Pagera. _createLink jest metodą prywatną i wykorzystywaną tylko dla domyslnego wygladu. Domyslny wyglad zmienia sie poprzez dziedzieczenie, bądź tez zapodania do klasy wlasnej funkcji generującej. W kodzie klasy nie trzeba nic modyfikowac.
edit: pozatym w konstruktorze klasy jest parametr $pageLink, do ktorego wkladasz to i owo. mozesz tam i swoje Get wstawic, co pisales
kiedy mozna (czy wogole mozna) spodziewac sie tej klasy dla php 4?
Ups.... zupelnie o tym zapomnialem.
W nastepnym tygodniu ide na urlop, to postaram sie wowczas to przepisac.
edit:
W zasadzie przeróbek nie bylo duzo i zrobilem to teraz. Tak wiec wersja dla php4 jest juz dostępna. Link w pierwszym poscie topicu i/lub w moim podpisie.
Mam problem, uzylam kodu tak jak w przykladzie, wszystko dziala ale tylko jesli biore wszystkie rekordy z bazy, jesli wstawie wczesniej forme pytaniem i przekaze zmienna do wyszukiwania przez post to na 1 stronie jest OK, a na kolejnych zmienna ograniczajaca wyszukiwanie jest kasowana (ilosc stron sie zmienia automatycznie i mam wszystkie rekordy z bazy...)
Co mam zrobic? Pomocy!!!
Joanna
Problem jako taki nie jest związany z moją klasą.
Dzieje sie tak, gdyz przechadząc do nastepnej strony, tracone sa dane z posta z poprzedniego żadania.
Rozwiązanie:
gdy wyslesz formularz, zapisz jego wynik (w sensie pol jakie przeslalas) do sesji. Nastepnym razem sprawdzaj czy wyslano formularz. Jesli nie wyslano, pobieraj dane wyszukiwania z sesji. Jesli znowu wyslano formularz, nadpisz dane w sesji.
Jesli nadal nie wiesz jak to zrobic, zaloz topic w dziale php. Twoj problem jak pisalem nie jest związany z moją klasą a z logiką Twojej aplikacji.
edit po poscie nizej:
zaloz topic w dziale php i tam opisz sprawe. Nie wykluczone ze sie tam odezwe. chodzi oto, by tu nie zasmiecac topicu
edit: widze ze topic juz zalozylas. Posta ponizej wiec usuwam
dzieki za klase w wersji dla php4
mam problem jak ladnie polaczyc ja z moim serwisem
korzystam z mod_rewrite
mam podstrone wszystkie_numery
teraz chcialbym zeby link wygladal tak:
wszystkie_numery_7
da sie to jakos ladnie ustawic czy trzeba pisac swoja klase, albo ingerowac w ta?
@AxZx nie bede sciemnial. mod_rewrite to dla mnie wielka tajemnica....
A konkretnie rzecz mowiac nie mialem jeszcze okazji sie tym zajac, wiec nie wiem co musisz zrobic.
hmm chcialbym moc wprowadzic jak ma wygladac url
<?php $url = 'wszystkie_numery_'; ?>
<?php $get = $_GET['page']; ?>
@AxZx z racji ze szerzych po różnych topicach nieprawdziwe plotki to pisze tutaj
U mnie tez mozesz ustawic sobie jak ma wygladac link. W wersji 2.0 mozesz albo dziedziczyc po klasie, albo do klasy zapodac funkcje, ktora generuje Pager i tym samym, ktora generuje linki.
Zczytywanie strony skad chcesz tez nie jest problemem. Zczytujesz sobie strone sam, a potem wywolujesz metody klasy: SetActualPage()
I juz wszystko jest.
nospor: a co ty powiesz na taki pomysl (moze w wersji 2.1?), ze masz w klasie zmienna co wyglada tak: /path_costam<page_id>_<cos_tam_innego>, i regexami bedziesz ustalal jak ma wygladac link, mysle ze nie kazdemu bedzie sie chcialo dziedziczyc klase i sie za duzo bawic.
Ja to jak juz tu wspomnialem, musialem sobie zrobic (i zrobilem ) link co wyglada tak: "java script:doNavigateToPage(<page-id>);".
Mysle ze zalapiesz o co mi chodzi.
Pozdrawiam
chyba chodzi ci o to samo o co mnie:)
balon wlasnie cos takiego zrobil w swojej klasie
co za lenie....
Dobra, leniwy klient nasz Pan. Sie dorobi. To zaden problem.
@nospor jak widzisz problem wizualizacji linkow powraca. Ja we wczesniejszej wypowiedzi zaproponowalem zaprzegniecie do tego celu wzorca strategii tzn. proces generowania linka wyrzucic do osobnej wyspecjalizowanej klasy, nasty_psycho proponuje uzycie wyrazen regularnych. O ile moja propozycja wydaje mie sie bardziej profesjonalna o tyle propozycja nasty_psycho bardziej przyjazna dla uzytkownika.
@bigZbig jak tak sie dluzej nad tym zastanawiam to faktycznie to ma sens. Chyba pojde na "kompromis": zrobie i tak i tak. czyli po nasty_psychowemu i po Twojemu
Dodatkowo po Twojemu to mysle by dorobic w interfejsie metode do pobierania numeru aktualnej strony. Skoro ktos buduje wlasny link, to i pewnie w specyficzny sposob bedzie pobieral ten numer
edit:
No to jest wersja 2.01
Zmiany:
- dorobilem na szybko ten link. teraz w konstruktorze, jesli podamy drugi parametr i bedzie w nim ciag:
#PAGE# to link ten zostanie niezmieniony, czyli bedzie tak jak user podal, za wyjatkiem #PAGE#, ktore zostanie zamienione na numer strony
Czyli dla przykladu co podal AxZx powinno byc:
<?php $pager = new Pager('idPagera', 'wszystkie_numery_#PAGE#'); ?>
fantastycznie:)
coraz lepsza klasa
a nie lepiej zrobic metode do ktorej wrzucamy parametr ktory bedzie wlasnie tym URLem ?
cos jak
<?php $pager->SetUrl('wszystkie_strony_#PAGE#'); ?>
No ale teraz to ustawiasz w konstruktorze. Co za roznica czy w metodzie oddzielnej czy od razu? Tak mialem od wersji 1.0 i tak zostalo
@nasty_psycho - wzorzec strategi jest bardzo latwy do realizacji i osobiscie nie uwazam, aby oplacalnosc jego stosowania rezerwowac jedynie dla bardzo skomplikowanych mechanizmow. Trzeba jedynie rozumiec idee OOP i umiec pisac do interfejsu.
gdzie mozna nauczyc sie takiego fachu ?
Nie mam zielonego pojęcia jak to ze smarty połączyć i wogóle jak to działa, przeczytałem dwie strony i pod kilkoma odnośnikami byłem ale nie mogę tego ugryźć :| W ogóle nie kapuje stronicowania
co to jest stronicowanie to wiemi jak to dziala (ze jest strona 1 i tam pierwsze 20 rekordów, strona 2 i kolejne 20 rekordów) ale nie wiem jak to napisac :|
btw. ale co z tymi plikami które trzeba zaincludować ? tylko Pager.class.php czy wszystkie ?
Trzeci parametr ?
<?php public function __construct($id, $pageLink = '') ?>
<?php $pager = new Pager('idPagera'); ?>
3 parametr metody render
No to teraz kompletnie nic nie rozumiem
@Lee chlopie, olej tablice, bo dla dziebie to za wysoki poziom abstrakcji. Nie chce cie tym obrazic ino dac do zrozumienia bys narazie tablice olal
Przejrzyj przyklady co są zalączone.
Specjalnie dla Ciebie kod pod Smarty:
<?php http://www.php.net/session_start(); require_once('Pager.class.php'); $sql = 'select count(*) from TABLE'; $result = http://www.php.net/mysql_query($sql); $row = http://www.php.net/mysql_fetch_array($result); $recordsCount = $row[0];//pobranie liczby rekordów try{ $pager = new Pager('idPagera'); $pager->SetTotalRecords($recordsCount); $pag = $pager->Render(true); $start = $pager->GetIndexRecordStart(); $end = $pager->GetIndexRecordEnd(); } catch (Exception $e) { http://www.php.net/echo $e->getMessage(); } //zapytanie z uwzglenieniem stronicowania $sql = 'select * from TABLE limit '.$start.','.($end - $start + 1); //...pobranie wyników i ich wyswietlenie //tu gdzies tworzysz sobie smarty //przypisanie do smarty $smarty->assign('pager', $pag); ?>
Nie obraziłem się, bo sam stwierdzam że jestem tępy "Przerobiłem" ten kod co podałes, ale trochu koślawo, bo mam 8 wpisów w bazie danych i ustawiłem sobie ze ma mi wyswietlać 4 ale to wyświetla mi tak
8 wpis | 8 wpis
8 wpis | 8 wpis
1 wpis | 5 wpis
2 wpis | 6 wpis
3 wpis | 7 wpis
4 wpis | 8 wpis
Kreska | oznacza, po przełączeniu na następną strone
kod wygląda tak
<?php require_once('Pager.class.php'); $sql = 'select count(*) from '.$tbl_guestbook.''; $result = http://www.php.net/mysql_query($sql); $row = http://www.php.net/mysql_fetch_array($result); $recordsCount = $row[0]; try{ $pager = new Pager('idPagera'); $pager->SetTotalRecords($recordsCount); $pag = $pager->Render(true); $start = $pager->GetIndexRecordStart(); $end = $pager->GetIndexRecordEnd(); } catch (Exception $e) { http://www.php.net/echo $e->getMessage(); } $sql = 'select * from '.$tbl_guestbook.' limit '.$start.','.($end - $start + 1); $query = http://www.php.net/mysql_query($sql); while ($result = http://www.php.net/mysql_fetch_assoc($query)){ $row[] = $result; } $smarty->assign('pager', $pag); $smarty -> assign('entry', $row); ?>
{foreach from=$entry item=entry} {$entry.title} :: {$entry.author} {/foreach} {$pager}
<?php //.... $pager->SetRecordsPerPage(4); $pag = $pager->Render(true); //..... ?>
<?php //..... $row = http://www.php.net/array(); while ($result = http://www.php.net/mysql_fetch_assoc($query)){ $row[] = $result; } //..... ?>
No fakt jest row, ale przed chwilą miałem wysłac do Ciebie PW że już rozwiązałem. Jednak ja to rozwiązałem zmieniając $row[] as $entry[]
Dzięki za fatygę Pozdrawiam
Hmmm... zauważyłem złe generowanie linków odpowiedzialnych za przeskoczenie o X stron. Swoje twierdzenie opieram na przykładzie ex_with_array dołączonym do paczki z klasą. Otóż: na stronie 4 jest dostępny link przeskoczenia do tyłu o.... 5 pozycji... czyli do strony "-1" tak samo się dzieje jak na stronie 22 możemy przejść do strony 27 (a jest tylko 25 ). Ja to sobie tak naprawiłem zmieniając kilka linijek metody _toArray:
<?php if ($this->_indexPageStart > 1) { $this->_array[self::_GOTO_FIRST_] = 1; $this->_array[self::_GOTO_PREV_X_] = $this->_actualPage - $this->_pagesPerNav; } ?>
<?php if ($this->_indexPageStart > 1) { $this->_array[self::_GOTO_FIRST_] = 1; #$this->_array[self::_GOTO_PREV_X_] = $this->_actualPage - $this->_pagesPerNav; } if ($this->_actualPage > 5) { // link pojawiał się już na stronie 4 (4-5=-1) na stronie 5 też go nie powinno być (5-5=0) - czyli powinien być na stronach 6 i większych $this->_array[self::_GOTO_PREV_X_] = $this->_actualPage - $this->_pagesPerNav; } ?>
<?php if ($this->_indexPageEnd < $this->_totalPages) { $this->_array[self::_GOTO_NEXT_X_] = $this->_actualPage + $this->_pagesPerNav; $this->_array[self::_GOTO_LAST_] = $this->_totalPages; } ?>
<?php if ($this->_indexPageEnd < $this->_totalPages) { #$this->_array[self::_GOTO_NEXT_X_] = $this->_actualPage + $this->_pagesPerNav; $this->_array[self::_GOTO_LAST_] = $this->_totalPages; } if ($this->_indexPageEnd+($this->_pagesPerNav/2) <= $this->_totalPages) { $this->_array[self::_GOTO_NEXT_X_] = $this->_actualPage + $this->_pagesPerNav; } ?>
tez to zauwazylem, ale gdy przeskoczysz na 27 ktorej nie ma to i tak wyswietli sie ostatnia strona 25.
No tak, ale ja nie lubię takich małych bugów- faktycznie wyświetli się ostatnia (lub pierwsza) strona, ale zawsze jakoś tak drażni Poza tym raczej taki zabieg nie wpłynie na szybkość skryptu- a i ładniej wygląda Ale tak to klasa ok
Dzieki za wykrycie buga
Po prostu link o x do tylu, gdy stron jest mniej niz x, nie powinien sie wogle pojawiac. Moje niedopatrzenie (musialem w wersji 2.0 to jakos skaszanic, bo w 1.0 bylo raczej ok). W poniedzialek to poprawie, gdyz teraz siedze przy kompie bez php.
Ale jak zauwazyliscie, wyswietli sie prawilowa strona. Jest to zabezpieczenie, jakby ktos z palca wpisal zla strone
edit:
ok, to jest poprawka. znajduje sie w pakiecie v2.02.
Bug dotyczyl tylko sytuacji, gdy ustawiony byl "smart" Render, czyli ze aktualna strona byla po srodku. W normalnym renderowaniu bylo ok.
Świetna klasa nospor! Wielkie dzięki - działa o wiele szybciej od mojego dotychczasowego sposobu stronnicowania.
Pozdrawiam
Mam pytanie:
Jak powinien wyglądać prawidłowo konstruktor dla klasy która korzysta do przechodzenia do kolejnych stron z zewnętrznego formularza . Nospor pisze w pierwszym poscie że trzeba podać pierwszy i trzeci argument. Rozumiem ze w pierwszym ma być unikalne idPagera, w trzecim idFormularza (czyli np $ile) a co mam w takim razie wpisać w drugim, bo przecież nie można go ominąć??
<?php $pager = new Pager('idPagera', 'co tutaj??', '$ile'); ?>
<?php $pager->SetRecordsPerPage($ile); ?>
Widze ze korzystasz ze starej wersji, 1.0, bo w wyzszych juz konstruktor nie ma 3 parametrow
tak sie nie wstawia zmiennych '$ile', powiino byc:
<?php $pager = new Pager('idPagera', '', '$ile'); ?>
<?php $pager = new Pager('idPagera', '', $ile); ?>
OK trochę posiedziałem, ale udało mi się zrobić to co chciałem - uczymy się na błędach
Nieśmiało wydaje mi się że znalazłem małą skazę wizualną tzn. o jeden za dużo separator ($sep) między ostatnim indeksem numerycznym a > (Następna strona) co powoduje większą przerwę niż między innymi indeksami pegera. W kodzie jest to linia 382 dla PHP4 wersji pegera v2.02 i 405 dla PHP5.
Pozdrawiam
Witam!
Mam pewien problemik. Dalaczajac pager'a do swojego kodu, wydaje mi sie, ze robie wszystko ok, jednak wyskakuje mi nastepujacy błąd:
Parse error: parse error, unexpected T_CONST, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /www/data.users/fr/e/e/lsee.fr/www/lsee1/Pager.class.php on line 38
Pomóżcie, please.....
Z gory dziekuje i pozdrawiam
napisz co masz w linii 38 pliku pager.class.php
const _GOTO_FIRST_ = 'gtf';
praktycznie jest to sam poczatek klasy
jak na moj gust to ty uzywasz klasy napisanej dla php5 pod php4
albo zmien wersje php którego uzywasz, albo weź wersję klasy dla php4
ajjjj.... sorka, moj blad.... wstyd i hanba, przepraszam...
Możliwe, że o to co chcę zapytać już było w tym temacie, ale istnieje prawdopodobieństwo użytej nieznanej dla mnie nazwy stąd pytam po swojemu.
Otóż, mam stronkę, która wywoływana jest przez include i ma adres idex.php?op=2 --- użyłem tego napisanego przez Ciebie stronnicowania i działa ok, dopóki nie chcę dać na kolejną podstronę, ponieważ odsyła do strony, której nie ma: pp_idPegera=2. W celu usunięcia problemu oznaczyłem zmienną $pager = new Pager('op=2') oraz w klasie pager w linii 117 - $this->_paramPageNumber = ''.$id; --- wywaliłem spomiędzy średników znak pp_ --- nie wiem czy moje posunięcie było właściwe --- jeśli jest możliwość obejścia tego problemu to proszę o wskazówkę.
musisz wywolac konstruktor z drugim parametrem, u ciebie to by bylo mniej wiecej tak:
<?php $pager = new Pager('idPagera', 'index.php?op=2'); ?>
a ja chyba znalazłem błąd, a może i nie
<?php $pager->SetTotalRecords($gal->getGalleriesCount()); $pager->SetRecordsPerPage(1); $pager_rend = $pager->Render(); http://www.php.net/echo $page = $pager->GetActualPage(); ?>
<?php public function GetActualPage() { //if (!is_null($this->_indexRecordStart)) // throw new Exception(sprintf($this->_errorMsg['call_set'], 'GetActualPage')); return $this->_actualPage; } ?>
hehe, faktycznie, tak to jest jak sie robi ctrl+c, ctrl+v
To co wykomentowales powinno wygladac tak:
<?php if (http://www.php.net/is_null($this->_indexRecordStart)) throw new Exception(http://www.php.net/sprintf($this->_errorMsg['call_get'],'GetActualPage')); ?>
Dalej bawiłem się Twoja klasa i brakowało mi w niej takiego bajeru, że jak mam jakieś parametry, np. index.php?a=b&c=2 to coby Pager mi się do tego dopisał. Jak brakowało to i zrobiłem, a nóż się komuś przyda.
http://starzaki.eu.org/~maksymus007/PagerClass.zip
troche zmieniłem, troche dodałem. Przy czym ten tryb pracy wybieramy przed dodatkowy parametr w konstruktorze, przez co stara funkcjonalność jest niezmieniona.
Jeśli natomiast te dodatki miałby się znaleść w oficjalnym wydaniu to prosze o kontakt
<?php $pager = new Pager('idPagera', 'index.php?a=b&c=2'); ?>
To wiem, ale nie o to mi chodzilo W tym co podałeś po pierwsze - musisz ten cały ciąg podać jako parametr konstruktora. A pobrać go nie pobiore, musze i tak parsować $_GET. Po drugie jak w tym ciągu będzie index.php?a=b&c=d&page=23 gdzie page to nasz Pager to klasa zrobi z tego index.php?a=b&c=d&page=23&page=22 na ten przykład.
Jednak mówimy o troche innym zastosowaniu
No faktycznie ciut inaczej. Tak czy siak w "normalnych" (bez obrazy ) skryptach to ludek (czyli ty) powinien wiedziec jakie ma parametry i zapodac sam wlasciwy link.
No ale kazdy robi jak lubi
Mam pytanko odnośnie funkcji createLink
<?php function _createLink($title, $page, $text) { return '<a title="'.$title.'" href="'. ($this->_userWholeLink ? http://www.php.net/str_replace('#PAGE#', $page, $this->_linkPage) : ($this->_linkPage.$this->_linkSep.$this->_paramPageNumber.'='.$page)).'">' .$text.'</a>'; } ?>
<?php &cat=" . $_GET['cat'] . " ?>
eh czytaj dwa posty wyżej, post nospor`a
Prośba do ludzi dobrej woli
Przeróbcie mi poniższy kodzik na ten z pagerem.
On jest dla mnie zbyt pogmatwany, zebym umiala go tak zrobic.
PLSSS....
<?php menu('Ostatnio dodane'); if(http://www.php.net/isset($_GET['typ'])) { $typ = '`typ` = ' . (int) $_GET['typ']; }else{ $typ = "((`typ` >= 1 and `typ` <= 4) or (typ = '15') or (typ = '16') or (typ = '17'))"; } //$typ = (isset($_GET['typ']) ? '`typ` = ' . (int) $_GET['typ'] : '((`typ` >= 1 and `typ` <= 4) or (typ = '15'))'); $cat = (http://www.php.net/isset($_GET['cat']) ? ' and `category` = ' . (int) $_GET['cat'] : ''); $order = ''; if ($_GET['top'] == 1) { $order = ' order by `ocena` desc'; } elseif ($_GET['last'] == 1) { $order = ' order by `added` desc'; } $res = http://www.php.net/mysql_query('select * from `stuff` where ' . $typ . $cat); // ilosć trafień $hits = http://www.php.net/mysql_num_rows($res); $res = http://www.php.net/mysql_query('select * from `stuff` where ' . $typ . $cat . $order . ' order by added desc limit ' . ((int) $_GET['currentpage'] * iijii) . ', ' . ((int) $_GET['currentpage'] * 10 + 10)); if ($hits == 0) { http://www.php.net/echo 'Nie ma żadnych rekordów w tej kategorii.'; } else { while ($row = http://www.php.net/mysql_fetch_assoc($res)) { if($row['added']>0) $date = http://www.php.net/sprintf('<img src="ikonki/dodano.jpg">Dodano: %s <br />', http://www.php.net/date('Y.m.d', $row['added'])); else $date = (string) ''; $comments_count = (int) 0; $query = http://www.php.net/sprintf("SELECT COUNT(*) AS CommentsCount FROM komentarze WHERE stuff='%d'", $row['id']); $comments = http://www.php.net/mysql_query($query); if($comments) { $record = http://www.php.net/mysql_fetch_assoc($comments); $comments_count = $record['CommentsCount']; http://www.php.net/mysql_free_result($comments); } if($row['miniaturka']!='') { $image = http://www.php.net/sprintf('<img src="%s" alt="%s" class="icon"align="right"width="133px"height="100px"border="3" />', $row['miniaturka'], $row['title']); } else { $image = ''; } if(http://www.php.net/isset($categories[$row['category']])) $cat = http://www.php.net/sprintf("%s: ", $categories[$row['category']]); else $cat = (string) ''; http://www.php.net/printf('<table bgcolor="#F3F3F3" id="list"><tr><td style="text-align:left; clear:both; padding:0 4px;">%s <b>%s</b><a href="index.php?page=display&id=%d" class="stufflink"style="font-weight:bold;">%s</a><br />%s<img src="ikonki/wykres.jpg">Ocena: %d<br /><img src="ikonki/wykres.gif">Wyswietlen: %d<br /><img src="ikonki/trabka.gif">Komentarzy: %d<br /><img src="ikonki/info.gif">Zasugerował: %s</td></tr></table>', $image, $cat, $row['id'], $row['tytul'], $date, $row['ocena'], $row['counter'], $comments_count, $row['login']); } } http://www.php.net/echo '<div style="text-align: center">'; /********* NUMEROWANIE *********/ $temp = http://www.php.net/min((int) $_GET['currentpage'] + 5, http://www.php.net/ceil((float) $hits / 9.0)); http://www.php.net/echo '<center><table><tr><td>'; if ($_GET['currentpage'] > 0) http://www.php.net/print("<a href="index.php?page=list¤tpage=" . ($_GET['currentpage'] - 1) . "&cat=" . $_GET['cat'] . ""><img style="float:right;" src="gfx/poprzednia.jpg" border="0"></a></td>"); for ($i = http://www.php.net/max((int) $_GET['currentpage'] - 4, 0); $i < $temp; $i++) { http://www.php.net/echo '<td>'; http://www.php.net/print("<a href="index.php?page=list¤tpage=" . $i . "&cat=" . $_GET['cat'] . "">[" . ($i+1) . "]</a> "); http://www.php.net/echo '</td>'; if($i == ($temp - 1)) { http://www.php.net/echo '<td style="width:80">'; http://www.php.net/print("<a href="index.php?page=list¤tpage=" . ($_GET['currentpage'] + 1) . "&cat=" . $_GET['cat'] . ""><img style="float:right;" src="gfx/dalej.jpg" border="0"></a>"); http://www.php.net/echo '</td></tr>'; } } $strona = $_GET['currentpage'] + 1; http://www.php.net/echo '</table></center>'; if (!http://www.php.net/isset($_GET['currentpage'])) http://www.php.net/echo 'Jestes na stronie<b> 1</b>'; else http://www.php.net/echo 'Jestes na stronie <b>'.$strona.'</b>'; /*******************************/ http://www.php.net/echo '</div></div>'; http://www.php.net/echo "$div"; include ("test.php"); ?>
A ja mam jakiś dziwny problem.
Konstruktor wywołałem tak:
<?php if (http://www.php.net/isset($_GET['cat'])) $pager = new Pager('str','?page=list&cat='.$_GET['cat'].''); else $pager = new Pager('str'); ?>
Uzyłem tę klasę na swojej stronie ale coś nie działa. Chciałem podzielic stronę .html czy .php, w którym są obrazki na dwie części. Zamiast wyswietlać 10 chciałem aby wyswietlił po 5 z dwoma stronami.
Mam np. plik strona.php a w nim kod w divach gdzie dałem obrazki np.
<http://december.com/html/4/element/div.html class="kolor"> <http://december.com/html/4/element/a.html href="/images/1.jpg" title="foto" rel="lightbox[roadtrip]"><http://december.com/html/4/element/img.html alt="foto" src="/images/1a.jpg" /></http://december.com/html/4/element/a.html> <http://december.com/html/4/element/h2.html>Obrazek 1</http://december.com/html/4/element/h2.html> <http://december.com/html/4/element/ul.html> <http://december.com/html/4/element/li.html>Opis obrazka</http://december.com/html/4/element/li.html> </http://december.com/html/4/element/ul.html> </http://december.com/html/4/element/div.html> <http://december.com/html/4/element/div.html class="kolor"> <http://december.com/html/4/element/a.html href="/images/2.jpg" title="foto" rel="lightbox[roadtrip]"><http://december.com/html/4/element/img.html alt="foto" src="/images/2a.jpg" /></http://december.com/html/4/element/a.html> <http://december.com/html/4/element/h2.html>Obrazek 2</http://december.com/html/4/element/h2.html> <http://december.com/html/4/element/ul.html> <http://december.com/html/4/element/li.html>Opis obrazka</http://december.com/html/4/element/li.html> </http://december.com/html/4/element/ul.html> </http://december.com/html/4/element/div.html>
<?php http://www.php.net/session_start(); require_once('Pager.class.php', 'index.php?id=strona'); $pager = new Pager('idPagera'); $pager->SetTotalRecords(10); http://www.php.net/echo $pager->Render(); ?>
hm Ty nie rozumiesz chyba jakiej zasadzie działa stronnicowanie. Proponuje Ci wpisać obrazki do tablicy i wyświetlać fotki pętlą for gdzie start i end pętli przekaże Ci klasa pagera.
edit: he sie gra sie ma
No ale przeciez klasa ci nie podzieli pliku. Skad niby ona ma to wiedziec jak ma to zrobic? Zadaniem klasy jest zwrócenie dla Ciebie informacji, od jakiego indexu masz zaczac wyswietlac i na jakim skonczyc. A jak ty to wykorzystasz to juz Twoja sprawa.
Przyklad:
Masz tablicę o 100 elementach.
Ustawiles pager, by na stronie bylo po 10 elementow.
Klikasz na druga strone, a klasa zwroci ci informację, ze masz wyswietlisz elementy od 11 do 20. Ale wyswietlic musisz juz ty
edit: cos mi sie net zmulil i Balon mnie wyprzedzil
edit
No, niemalże rok nic nie zmieniałem w klasie. Czas wiec na nową wersję 2.5.
Wersja ta niestety nie jest kompatybilna wstecz. Wszakże łatwo możecie przejsc na nowe zmiany, ale zawsze to jakieś utrudnienie
Wiecej info http://nospor.pl/pager-2.5-n15.html
jak dla mnie 1 klasa. Znakomita robota. Tylko brakuje mi oprucz generowania pagera np tego co było we wcześniej wersji np Ilość wszystkich rekordów .... i możliwość zmiany tego tekstu na swój..
ok napisałem sobie, ale znalazłem 1 mały błąd chyba, że źle wykorzystuje klase
mam wyszukiwarkę ktora przeszukuje baze 1000 rekordów wpisze jakies tam słowo i znajdzie mi 500 rekordów i jak przechodze miedzy stronami np z 1 na 4 potem na 1 to porcjuje dla 1000.
mam takie cos:
<?php $classDoc = new Doc(); $classDoc->_where = $_GET['FOR']; $classDoc->_lang = Lang::getSesLang("SES"); $classDoc->_str = $_POST['q']; // slowo z wyszukiwarki $classDoc->_order = "time DESC"; $smarty->assign('cDoc2',$classDoc->likeCountDoc()); $pager = new Pager("list_doc"); $pager->SetTotalRecords($classDoc->likeCountDoc()); $pager->Make(true); $renderPager = $pager->Render(); $start = $pager->GetIndexRecordStart(); $end = $pager->GetIndexRecordEnd(); $smarty->assign('renderPager',$renderPager); $endes = $end - $start + 1; $classDoc->_f = $start; $classDoc->_t = $endes; $smarty->assign('RESULT',$classDoc->likeDocuments()); ?>
czy przy pomocy tej klasy ustawie stronicowanie takie jak na wykop.pl i czy mogę ingerować w wygląd ?
Dziwne pytanie zadajesz... ale tak - ustawisz, choć musisz sam (głowy nie dam) napisać skrypt do wyglądu.
Najlepiej ściągnij i się przekonaj ;]
Pozdrawiam.
Witam
Jest może możliwośc załączenia klasy pager do innej klasy ?
Pozdrawiam
Witam bardzo dziękuję za klase działą bardzo fajnie:)
Mam jednak dziwny zachowanie klasy. Za kazdym razem jak wywala mi taki tekst powyżej tabeli. patrzylem w kod nie ma nic takiego. Czego to moze byc blad??
<?php ďťż ?>
Akurat jakiś czas temu przerobiłem metodę tej klasy:
<?php protected function toString() { //print_pre($this->array); if ($this->totalRecords <= $this->RecordsPerPage) return ''; $_str = ''; $sep = ' '; //if (isset($this->array[self::GOTO_PREV_X])) //$_str .= $this->createHTMLLink($this->array[self::PAGES_PER_NAV].' stron(y) do tyłu', $this->array[self::GOTO_PREV_X][self::LINK], '<<').$sep; if (http://www.php.net/isset($this->array[self::GOTO_PREV])) $_str .= $this->createHTMLLink('Poprzednia strona', $this->array[self::GOTO_PREV][self::http://www.php.net/link], 'poprzednia').$sep; if (http://www.php.net/isset($this->array[self::GOTO_FIRST])) $_str .= $this->createHTMLLink('Pierwsza strona', $this->array[self::GOTO_FIRST][self::http://www.php.net/link], $this->array[self::GOTO_FIRST][self::PAGE]).' ...'.$sep; foreach ($this->array[self::PAGES] as $_page => $_pageLink){ if (!$_pageLink) $_str .= '<span><b>'.$_page.'</b></span>'; else $_str .= $this->createHTMLLink("Strona ".$_page, $_pageLink, $_page); $_str .= $sep; } if (http://www.php.net/isset($this->array[self::GOTO_LAST])) $_str .= $this->createHTMLLink('Ostatnia strona', $this->array[self::GOTO_LAST][self::http://www.php.net/link], '... '.$this->array[self::GOTO_LAST][self::PAGE]); if (http://www.php.net/isset($this->array[self::GOTO_NEXT])) $_str .= $sep.$this->createHTMLLink('Następna strona', $this->array[self::GOTO_NEXT][self::http://www.php.net/link], 'następna'); //if (isset($this->array[self::GOTO_NEXT_X])) //$_str .= $sep.$this->createHTMLLink($this->array[self::PAGES_PER_NAV].' stron(y) do przodu', $this->array[self::GOTO_NEXT_X][self::LINK], '>>'); return $_str; } ?>
witajcie mam problem nie chce wyswietlic mi sie pager
mam cos takiego
<?php $sql = 'select count(*) from notice'; $result = http://www.php.net/mysql_query($sql); $row = http://www.php.net/mysql_fetch_array($result); $recordsCount = $row[0];//pobranie liczby rekordów $pager = new Pager('p'); $pager->SetTotalRecords(3);//ustawienie liczby rekordów //wygenerowanie pagera i zapamietanie go w zmiennej w celu //pozniejszego wyswietlenia $renderPager = $pager->Render(); $start = $pager->GetIndexRecordStart();//pobranie indexu rekordu początkowego $end = $pager->GetIndexRecordEnd();//pobranie indexu rekordu koncowego //zapytanie z uwzglenieniem stronicowania $sql = 'select SQL_CALC_FOUND_ROWS * from notice limit '.$start.','.($end - $start + 1); //...pobranie wyników i ich wyswietlenie $result = http://www.php.net/mysql_query($sql); $row = http://www.php.net/array(); while ($row = http://www.php.net/mysql_fetch_assoc($result)){ $res[] = $row; } $res = $res ?>
<?php smarty->assign('pager',$renderPager); ?>
<http://december.com/html/4/element/div.html id="p">{$peger}</http://december.com/html/4/element/div.html>
może przez literówkę w template: e => a
<http://december.com/html/4/element/div.html id="p">{$pager}</http://december.com/html/4/element/div.html>
nie to nie przez to wogole jak zrobie vardump z $pagera to jest pusty
A jakiej wersji pagera uzywasz? Najnowszej 2.5 ? No to zjadles Make(). Zajrzyj do przykladow w paczce do sciągniecia. Tam masz pokazane jak prawidłowo uzyc nowej wersji
wersja 2.0 dla php5 takiej uzywam co jest nie tak
<?php $pager->SetTotalRecords(3) ?>
hej, oki wyswietlil mi sie poprawnie pager
dalem mu
<?php $pager->SetRecordsPerPage(3); ?>
jak chce wyswitlic kolejne 3 rekordy to pojawia mi sie xxx.php?pp_p=2 nie wiem co mam zrobic aby pager dzialal...
normalnie masz jakies kosmiczne problemy.
Pokaza caly kod jaki masz.
pokaz rowniez kod html jaki ma w sobie Twoj $renderPager
oto moj kod :
<?php switch($do){ case 'show_notice': $db = http://www.php.net/mysql_connect('localhost','root',xxxxx'); mysql_select_db('xxxx',$db); $sql = 'select http://www.php.net/count(*) from notice'; $result = mysql_query($sql); $row = mysql_fetch_array($result); $recordsCount = $row[0]; $pager = new Pager('p'); $pager->SetTotalRecords($recordsCount); $pager->SetRecordsPerPage(3); $renderPager = $pager->Render(); $start = $pager->GetIndexRecordStart(); $end = $pager->GetIndexRecordEnd(); $sql = 'select * from notice limit '.$start.','.($end - $start + 1); $result = mysql_query($sql); $row = array(); while ($row = mysql_fetch_assoc($result)){ $res[] = $row; } $res = $res; $smarty->assign('pager,$renderPager); break; } ?>
<http://december.com/html/4/element/div.html id="p">{$pager}</http://december.com/html/4/element/div.html>
nie moge kurcze tego rozgrysc w linku mam /_admin/show.php?do=show_notice
kombinowalem cos z konstruktorem ale nie chce mi to wyjsc jak to zrobic
dobra poradzilem sobie dziala dzieki wielkie i pozdrawiam...
Cześć @nospor
Korzystam z Twojej klasy 2.0 pod PHP4. Działa mi znakomicie, jednakże mam jeden problem. Otóż gdzie i jaki parametr powinienem dodać aby moje linki wyglądały tak:
Super robota, świetna klasa, podziękowania dla autora
A teraz pytanie
Czy jest jakiś sposób na niceurl? bo widze w TODO, ze cos ma byc z tym pomyślane
Witam
ja zapodałem tą klasę do joomli i spisuje się znakomicie :]
Pozdrawiam
Niceurl można bardzo łatwo utworzyć
np chcemy aby nasze linki wyglądały tak, jeżeli pracujemy np. z Zend Framework
http://www.example.com/news/archiwum/page/1
http://www.example.com/news/archiwum/page/2
http://www.example.com/news/archiwum/page/3
itd
Najprościej uzyskać to w ten sposób
$pager = new Pager('page', '/news/archiwum/page/#PAGE#');
$pager->SetActualPage($this->_request->getParam('page'));
pozdrawiam
Witam. Właśnie próbuję zastosować kod Pager-a na stronie. Wykonałem na razie taki kod
Uuuooo matko jaka pierdoła ze mnie. Już poprawiłem.
Chodziło o to że jeśli miałem linki w postaci
Link1: product.php?group=1
Link2: product.php?group=2
itd...
to przy przejściu x link1 do link2 strona pozostawała taka sama jak na link1. Ale przecież wystarczyło zrobić
product.php?group=1&ppp=1 i po zawodach. Chociaż nie wiem czemu klasa Pager nie ustawia sama w momencie kiedy nie jest zdefinowana zmienna ppp to przyjmuje stronę nr1... chyba że coś w kodzie pomieszałem.
Mogę się zapytać po co używasz sesji w Twoim stronicowaniu ? Do zapamiętywania, na której stronie byłem ostatnio ? Bo mi to niepotrzebne. Czy jesli zakomentuję session_start() to narażam się na jakieś problemy ?
<?php //session_start(); require_once('pager/Pager.class.php'); $sql = 'select count(*) from wiadomosci'; $result = http://www.php.net/mysql_query($sql); $row = http://www.php.net/mysql_fetch_array($result); $recordsCount = $row[0];//pobranie liczby rekordów try{ $pager = new Pager('idPagera'); $pager->SetTotalRecords($recordsCount); $pager->Make(true); $pag = $pager->Render(); $start = $pager->GetIndexRecordStart(); $end = $pager->GetIndexRecordEnd(); } catch (Exception $e) { http://www.php.net/echo $e->getMessage(); } //zapytanie z uwzglenieniem stronicowania $sql = 'select * from wiadomosci limit '.$start.','.($end - $start + 1); //...pobranie wyników i ich wyswietlenie $result = http://www.php.net/mysql_query($sql) or http://www.php.net/die('blad zapytania1'); while($val = http://www.php.net/mysql_fetch_array($result)) { $wiadomosc = $val['tresc']; http://www.php.net/echo "$wiadomosc<br/><br/><br/>"; } http://www.php.net/echo $pag;//wyswietlenie pager'a ?>
<?php $_str .= '<span><strong>'.$_page.'</strong></span>'; ?>
<?php //.... $pager = new Pager('idPagera'); $pager->SetUseSession(false); //..... ?>
<?php //... http://www.php.net/echo 'Strona '.$pager->GetActualPage().' z '.$pager->GetTotalPages(); http://www.php.net/echo $pag;//wyswietlenie pager'a //... ?>
Dzięki - a nawiasem mówiąc - dopiero teraz zwróciłem uwagę na: $pager = new Pager('idPagera'); i na to, że trzeba tu podać liczbę.
plik ze stronicowaniem:
<?php require_once('pager/Pager.class.php'); $sql = 'select count(*) from wiadomosci'; $result = http://www.php.net/mysql_query($sql); $row = http://www.php.net/mysql_fetch_array($result); $recordsCount = $row[0];//pobranie liczby rekordów try{ $pager = new Pager(1); $pager->SetUseSession(false); $pager->SetTotalRecords($recordsCount); $pager->Make(true); $pag = $pager->Render(); $start = $pager->GetIndexRecordStart(); $end = $pager->GetIndexRecordEnd(); } catch (Exception $e) { http://www.php.net/echo $e->getMessage(); } //zapytanie z uwzglenieniem stronicowania $sql = 'select * from wiadomosci ORDER BY datadodania DESC limit '.$start.','.($end - $start + 1); //...pobranie wyników i ich wyswietlenie http://www.php.net/echo "<br/>"; $result = http://www.php.net/mysql_query($sql) or http://www.php.net/die('blad zapytania'); while($val = http://www.php.net/mysql_fetch_array($result)) { $wiadomosc = $val['tresc']; http://www.php.net/echo "$wiadomosc<br/><br/><br/>"; } http://www.php.net/echo "<div class='pomaranczowy'>"; http://www.php.net/echo 'Strona '.$pager->GetActualPage().' z '.$pager->GetTotalPages(); http://www.php.net/echo "</div>"; http://www.php.net/echo $pag;//wyswietlenie pager'a ?>
<?php public $RecordsPerPage = 5; //ilosc rekordow na stronie ....................................... if (!$_pageLink) $_str .= '<span class="uwypuklenie">'.$_page.'</span>'; else ?>
O dzięki za info
Witam
Mam problem z sortowaniem po dwóch kolumnach.
Mam kod
<?php $pager = new EPager('id', null, false,$orders,http://www.php.net/array('typ_ogloszenia' => 'DESC', 'nazwa' => 'ASC')); ?>
Witam!
Mam taki problem z klasa Pager:
kiedy przechodze np. dalej ">" Pager dodaje mi do urla : ppidPager=<nr_strony>
i tak np. po kilku przejsciach mam takiego url'a:
http://localhost/index.php?menu=stats&ppidPagera=2&ppidPagera=3&ppidPagera=4&ppidPagera=5&ppidPagera=6&ppidPagera=7&ppidPagera=8&ppidPagera=9http://localhost/index.php?menu=stats&ppidPagera=2&ppidPagera=3&ppidPagera=4&ppidPagera=5&ppidPagera=6&ppidPagera=7&ppidPagera=8&ppidPagera=9http://localhost/index.php?menu=stats&ppidPagera=2&ppidPagera=3&ppidPagera=4&ppidPagera=5&ppidPagera=6&ppidPagera=7&ppidPagera=8&ppidPagera=9http://localhost/index.php?menu=stats&ppidPagera=2&ppidPagera=3&ppidPagera=4&ppidPagera=5&ppidPagera=6&ppidPagera=7&ppidPagera=8&ppidPagera=9http://localhost/index.php?menu=stats&ppidPagera=2&ppidPagera=3&ppidPagera=4&ppidPagera=5&ppidPagera=6&ppidPagera=7&ppidPagera=8&ppidPagera=9 ... itd..
Wie ktos moze czym to moze byc spowodowane?
Tak tworze obiekt klasy :
<?php $res = http://www.php.net/mysql_query($que); $recordsCount = http://www.php.net/mysql_num_rows($res); try{ $pager = new Pager('idPagera'); $pager->RecordsPerPage = 10; // Ilość rekordow na strone $pager->SetTotalRecords($recordsCount); $pager->Make(true); $pag = $pager->Render(); $start = $pager->GetIndexRecordStart(); $end = $pager->GetIndexRecordEnd(); } catch (Exception $e) { http://www.php.net/echo $e->getMessage(); } ?>
a jak wyswietlasz linki pagera? Sam cos jeszcze generujesz?
nie, poprostu <?=$pag?>
jedyna rzecz jaka zmienilem w klasie to znak dolaczenia z '?' ma '&'
Witam
Czytam i czytam i znaleźć nie mogę.
Jak wyciągnąć z pagera tablicę z linkami, zamiast stringa z gotowym formatowaniem.
Wszędzie jest napisane, że wystarczy na 3 parametr Render dać true. Jednakże mi to nie działa.
$pag = $pager->Render('','',true);
{foreach item=link from=$links} <http://december.com/html/4/element/div.html class='klasa_linku'>{$link}</http://december.com/html/4/element/div.html> {/foreach}
Metoda Make() zwraca ci tablice. Czytaj komentarze przy funkcjach
a ja mam takie zapytanie
mam plik ciekawostki.php w nim zawarte jest wyświetlanie ciekawostek oraz dzielenie ich na strony za pomocą tego pagera.
na stronie głównej index.php mam warunek:
elseif ($_GET['m'] == 'menu' && $_GET['id'] == '7') { include('ciekawostki.php'); }
Wszystko masz w komentarzach
$pager = new Pager('idPagera', null);
dzieki wielkieee
Witam,
Mój problem polega na tym, że za cholery nie moge dodać do tego skryptu stronicowania.
Poniższy przyklad otwiera się w nowym okienku gdzie w postaci linków wyświatlane są rekordy pobrane z bazy, kliknięty tekst wpisuje się do formulaża w poprzednim okienku. Nie wiem jak dużo będzie rekordów wiec chciałbym dodać stronicowanie (i wyszukiwarke, ale to trochę później), ale za cholery nie wiem jak w tym przypadku to zrobić kombinowałem na sto milionów sposobów i nic, jak stronicowanie działa to nie działa wpisanie tekstu do formulaża i na odwrót. Jeżeli ktoś może mi pomóc bede bardzo wdzięczny.
Dzialanie skryptu pokazane jest pod adresem: http://vbch.nazwa.pl/iten/re1/visitas.php tam w formulażu przy polu "Tipo visita" jest link "(dodaj)" po kliknięciu ktorego otwiera się nowe okienko z pożiższym skryptem.
<?php $baza_host=("host"); $baza_login=("login"); $baza_haslo=("haslo"); $baza_nazwa=("nazwa"); //Laczenie sie z baza mysql $polaczenie = http://www.php.net/mysql_connect($baza_host, $baza_login, $baza_haslo); $db = http://www.php.net/mysql_select_db($baza_nazwa); $db_tables = http://www.php.net/array( 'iddetipovisita' => 'tipovisitas', 'jakas nazwa pola' => 'jakas nazwa tabeli' // itd. ); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>AJAX suggest</title> <meta name="keywords" content="" /> <meta name="description" content="" /> <script src="http://code.jquery.com/jquery-latest.js"></script> <link rel="stylesheet" href="../master.css" type="text/css" media="screen" title="no title" charset="utf-8"> </head> <body> <fieldset> <legend>Tipo visitas</legend> <input id="searchinput" type="text" name="search" value="" onkeyup="searchSuggest();" /> <input id="searchsubmit" type="submit" value="Search" /> </fieldset> <script type="text/javascript"> $(document).ready(function(){ $('a').click(function(){ v = $(this).html(); $('input[name=<?php http://www.php.net/echo $_GET['id']; ?>]', opener.document).val(v); //window.close(); }); }); </script> <ol> <?php $result = http://www.php.net/mysql_query('SELECT * FROM ' . $db_tables[$_GET['id']]); while($row = http://www.php.net/mysql_fetch_row($result)) { http://www.php.net/echo '<li><a href="#">' . $row[1] . '</a></li>'; } ?>
1) Coś dużo choler ci się w tekst wcina.
2) I gdzie tu mój skrypt?
3) W paczce masz podane przykłady. W czym masz konkretnie problem?
Konkretnie mój problem polega na tym, że trzeba dodać stronicowanie do tego skryptu, a nie bardzo wiem jak to zrobić, jak dodam stronicowanie to nie działa wpisywanie tekstu do formulaża i na odwrót tak jak pisałem w poprzednim poście.
No to pokaż jak dodajesz.
Np tak:
<script type="text/javascript"> $(document).ready(function(){ $('a').click(function(){ v = $(this).html(); $('input[name=<?php http://www.php.net/echo $_GET['id']; ?>]', opener.document).val(v); //window.close(); }); }); </script> <ol> <?php/* $result = mysql_query('SELECT * FROM tipovisitas'); while($row = mysql_fetch_row($result)) */?> <? function pasek($rekordow,$na_stronie,$na_pasku,$skrypt,$s) { $stron = http://www.php.net/ceil($rekordow/$na_stronie); if ($s<1) $s=1; if ($s>$stron) $s=$stron; $koniec = $s+$na_pasku; if ($s<=$na_pasku) $koniec = $na_pasku*2+1; if ($koniec>$stron) $koniec = $stron; $start = $koniec-$na_pasku*2; if ($start<1) $start=1; if ($s>1) $p = "<a href='$skrypt".($s-1)."'><<<</a>"; else $p = "<span style='color:gray'><<<</span>"; if ($s<$stron) $n = "<a href='$skrypt".($s+1)."'>>>></a>"; else $n = "<span style='color:gray'>>>></span>"; for ($i=$start; $i<=$koniec; $i++) { if ($i==$s) $l .= " <span style='color:#cc0000;'><b>$i</b></span> "; else $l .= "<a href='$skrypt$i'>$i</a>"; } if ($rekordow<1) $wynik = "brak informacji spełniających kryteria wyszukiwania"; else $wynik = "znalezionych: $rekordow, strona $s z $stron<br />"; if ($stron>1) $wynik .= "$p - $l - $n"; return $wynik; } $s = ($_GET["s"]>1)?http://www.php.net/number_format($_GET["s"], 0, "", ""):1; $na_stronie = 5; $na_pasku = 5; $skrypt = "options.php?s="; if (http://www.php.net/mysql_connect($sql_serwer, $sql_login, $sql_haslo) and http://www.php.net/mysql_select_db($sql_baza)) { $start = ($s-1)*$na_stronie; $wynik = http://www.php.net/mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM tipovisitas LIMIT $start, $na_stronie "); $rekordow = http://www.php.net/mysql_result(http://www.php.net/mysql_query("SELECT FOUND_ROWS()"),0); $stron = http://www.php.net/ceil($rekordow/$na_stronie); if ($s>$stron and $rekordow>0) { $start = ($stron-1)*$na_stronie; $wynik = http://www.php.net/mysql_query("SELECT * FROM tipovisitas LIMIT $start, $na_stronie "); } http://www.php.net/mysql_close(); } http://www.php.net/echo "<p style='text-align:center;'>"; http://www.php.net/echo pasek($rekordow,$na_stronie,$na_pasku,$skrypt,$s); http://www.php.net/echo "</p>"; while($wynik and $dane = http://www.php.net/mysql_fetch_assoc($wynik)) { http://www.php.net/echo "<p>"; foreach($dane as $pole) http://www.php.net/echo " [$pole] "; http://www.php.net/echo "</p>"; } ?>
Słuchaj... piszesz że masz problem z moim pagerem gdy go dodajesz do swojego kodu. Proszę cię wiec, byś mi podał kod, w którym dodajesz mój pager. A ty co? Podsyłasz mi jakiś zupełnie inny kod.
Jeśli więc nie masz problemu z moim pagerem to czemu zawracasz gitare akurat w tym temacie?
Ok, mój błąd znalazłem temat w google tytul tematu jest: "Pager (stronicowanie), klasa, php4 i php5", więc jak miałem problem ze stronicowaniem, napisałem tutaj. Nie zauważyłem że to dział: "gotowe rozwiązania".
Coś mi nie działa.
<?php require('config.php'); http://www.php.net/session_start(); require_once('Pager.class.php'); $sql = 'SELECT count(*) FROM newsy'; $result = http://www.php.net/mysql_query($sql); $row = http://www.php.net/mysql_fetch_array($result); $recordsCount = $row[0];//pobranie liczby rekordów try{ $pager = new Pager('idPagera'); $pager->SetTotalRecords($recordsCount); $pager->Make(true); $pag = $pager->Render(); $start = $pager->GetIndexRecordStart(); $end = $pager->GetIndexRecordEnd(); } catch (Exception $e) { http://www.php.net/echo $e->getMessage(); } //zapytanie z uwzglenieniem stronicowania $sql = 'SELECT * FROM newsy LIMIT '.$start.','.($end - $start + 1); //...pobranie wyników i ich wyswietlenie http://www.php.net/echo $pag;//wyswietlenie pager'a ?>
Witam serdecznie,
cosik nie chce mi zadziałać ta klasa.Napisałem taki kod:
$recordsCount = 11;//pobranie liczby rekordów $start = null; $end = null; try{ //$pager = new Pager('idPagera'); //$pager = new Pager('idPagera', null); $pager = new Pager ($_GET['id'], "listaobiektow,".$_GET['k1'].",#PAGE#,#PAGE#,".$_GET['k4'].",".$_GET['k5'].".html"); $pager->RecordsPerPage = 2; $pager->SetTotalRecords($recordsCount); $pager->Make(true); $pag = $pager->Render(); $start = $pager->GetIndexRecordStart(); $end = $pager->GetIndexRecordEnd(); } catch (Exception $e) { http://www.php.net/echo $e->getMessage(); } $zapytanie_wyswietlajacelista .= " ORDER by $sortujemy LIMIT ".$start.','.($end - $start + 1); $wyswietlamyliste2 = http://www.php.net/mysql_query($zapytanie_wyswietlajacelista); http://www.php.net/echo $zapytanie_wyswietlajacelista."----".$recordsCount;
SELECT * FROM cms_obiekty ORDER BY special DESC LIMIT 0,2
zrob print_r($_GET); gdy bedziesz na jakiejs stronie i powiedz co dostales.
Smiem twierdzic, ze skoro zrobiles ladny url, to nie zwracasz w GET atrybutu 'page' A niestety pager sam z siebie sie nie domysli co u ciebie jest stroną - on oczekuje parametry 'page'. Jak go nie to go nie ma i juz
http://www.php.net/array ( [gt_id] => listaobiektow [k1] => 2 [k2] => 6 [k3] => 6 [k4] => [k5] => [modrw] => )
Nie, stalych sie nie zmienia!
To masz zmienic/ustawic:
public $GeneralParamPageNumber = 'page';
oraz ustaw 3 parametr konstruktora na true:
$pager = new Pager ($_GET['id'], "listaobiektow,".$_GET['k1'].",#PAGE#,#PAGE#,".$_GET['k4'].",".$_GET['k5'].".html",true);
edit:
w sumie wystarczy jak tylko zmienisz na to:
$pager = new Pager ($_GET['id'], "listaobiektow,".$_GET['k1'].",#PAGE#,#PAGE#,".$_GET['k4'].",".$_GET['k5'].".html",'k2');
I nic juz wiecej nie musisz zmieniac
działa, dzięki wielkie:)))
ps. gdybym chciał ostylować to, to w którym miejscu najelpiej to zrobić (numerki i strzałki)?
1) Albo odbierz tablicę pagera i rob z nią co chcesz
Metoda GetArray() wywolana po Make()
2) Nadpisz metodę toString() w klasie dziedziczacej
przyklad ex_with_extends.php
3) Podaj callbacka
przyklad ex_with_extern.php
Do wyboru do koloru
echo "<b>".$pag ."</b> z ".$pager->GetTotalPages(); - mam takie wywołanie...
Kazda strona miałaby wyglądać następująco:
<b><a href="listaobiektow.html"></b>
a strona "wytłuszczona" - tj aktualnie oglądana (lub też domyślna) tak:
<b id="strony1"><a href="listaobiektow.html"></b>
nie da się tego jakoś prościej zrobić?
zrobiłem sobie takie coś (walcze z klasą):
protected function createHTMLLink($title, $link, $text) { return '<b><a title="'.$title.'" href="'.$link.'">'.$text.'</a></b>'; } protected function createHTMLLink2($title, $link, $text) { return '<b id=\"strony1\"><a title="'.$title.'" href="'.$link.'">'.$text.'</a></b>'; }
generalnie chciałbym efekt taki uzyskać:
<http://december.com/html/4/element/a.html><http://december.com/html/4/element/b.html><http://december.com/html/4/element/a.html href="plik1.html">1</http://december.com/html/4/element/b.html></http://december.com/html/4/element/a.html> <http://december.com/html/4/element/a.html><http://december.com/html/4/element/b.html><http://december.com/html/4/element/a.html href="plik2.html">2</http://december.com/html/4/element/b.html></http://december.com/html/4/element/a.html> <http://december.com/html/4/element/a.html><http://december.com/html/4/element/b.html id="strony1"><http://december.com/html/4/element/a.html href="plik3.html">3</http://december.com/html/4/element/b.html></http://december.com/html/4/element/a.html> <!-- aktualnie oglądana stronka --> <http://december.com/html/4/element/a.html><http://december.com/html/4/element/b.html><http://december.com/html/4/element/a.html href="plik4.html">4</http://december.com/html/4/element/b.html></http://december.com/html/4/element/a.html>
protected function createHTMLLink2($title, $link, $text) { return '<b id=\"strony1\"><a title="'.$title.'" href="'.$link.'">'.$text.'</a></b>'; }
No ale po co tworzysz metode createHTMLLink2? Powiedzialem, ze skoro za duzo masz zachodu to nadpisz zmien kod w klasie i juz.
zadziałało, dzięki WIELKIE ))
Mi wywala:
Przeczytałeś chociaż komunikat błędu?
Zjadłeś wywołanie funkcji Make(). Przejrzyj przykłady dołączone do paczki - tam masz napisane jak wywoływać
Dzięki. Trochę przerobiłem to i działa. Mogłeś bardziej wyróżnić tekst o tym, że to w pierwszym poście nie dotyczy nowej wersji.
Co do skryptu, to jest spoko
Witam,
fajna sprawa z tym:) aczkolwiek mam pewien problem...
1) wyswietla mi jak powinno:
1 2 3 4 5 6 7 8 9 10 11 > >> >|
a chcialbym aby bylo napisane zamisat: ">|" 230 - lub aktualny numer ostatniej strony:
1 2 3 4 5 6 7 8 9 10 11 z 230 > >> 230
a kolejny problem jest taki, ze nie wiem dokladnie o co chodzi, ale moja strona ma tak, ze 1 strona nie ma id=1 tylko id=0
i przez to wchodzac na strone 2 (id=2) wchodzi mi strona 3, bo skoro ja mam pierwsza strone jako id=0 to chcac niechcac tak sie dzieje...
jak zmienic aby moja strona 1, ktora jest id=0 byla tym poprawnym id=1 ?
pozdrawiam:)
EDIT:
<? //Ładowaniu pliku konfiguracyjnego bazy danych i połączenie z bazą include "config.php"; //Ustalenie ilości wyświetlanych newsów na stronie http://www.php.net/define('limit_newsow', 15); $result = "SELECT SQL_CALC_FOUND_ROWS * FROM newsy ORDER BY id DESC, id DESC LIMIT ".http://www.php.net/mysql_escape_string((int)$_GET['s'] *limit_newsow).",".limit_newsow; //Pobiera ilosc_newsow rekordów z bazy, sortując wg daty rosnąco, zaczynając od $_GET['s']*ilosc_newsow $RES = http://www.php.net/mysql_query($result); // wykonujemy zapytanie while($AFR = http://www.php.net/mysql_fetch_assoc($RES)){ /*Wyświetlanie wyników:*/ $id=''.$AFR['id'].''; $text=''.$AFR['text'].''; http://www.php.net/echo "$id - $text"; } ?>
Skoro piszesz w temacie, o mojej klasie Pager, to mógłbyś chociaż z niej skorzystać, a dopiero potem pisać, że masz problem
Skoro nie zamierzasz korzystać (nikt ci przecież nie karze) to nie pisz w tym wątku - słyży do zupełnie czego innego.
Bo sam już nie wiem czy ty korzystasz czy nie. Bo pierwsza Twoja wypowiedź świadczy, że niby korzystasz, ale zaraz potem pokazujesz kod, który ewidentnie pokazuje, że nie korzystasz.
korzystam:)
ten kod sluzy mi tylko do wyświetlania newsów.. a jest taki, bo mialm tam inna paginacje, z ktorej zrezygnowalem, na rzecz tej.
takze prosze nadal o pomoc.
No to pokaż kod, co do którego masz pytanie i który zawiera moje stronicowanie, bo już nie wiem o co pytasz
<? //Ładowaniu pliku konfiguracyjnego bazy danych i połączenie z bazą include "config.php"; //Ustalenie ilości wyświetlanych newsów na stronie http://www.php.net/define('limit_newsow', 15); $result = "SELECT SQL_CALC_FOUND_ROWS * FROM newsy ORDER BY id DESC, id DESC LIMIT ".http://www.php.net/mysql_escape_string((int)$_GET['s'] *limit_newsow).",".limit_newsow; //Pobiera ilosc_newsow rekordów z bazy, sortując wg daty rosnąco, zaczynając od $_GET['s']*ilosc_newsow $RES = http://www.php.net/mysql_query($result); // wykonujemy zapytanie while($AFR = http://www.php.net/mysql_fetch_assoc($RES)){ /*Wyświetlanie wyników:*/ $id=''.$AFR['id'].''; $text=''.$AFR['text'].''; http://www.php.net/echo "$id - $text"; } ?>
<?php require_once('Pager.class.php'); $sql = 'select count(*) from newsy'; $result = http://www.php.net/mysql_query($sql); $row = http://www.php.net/mysql_fetch_array($result); $recordsCount = $row[0];//pobranie liczby rekordĂłw try{ $pager = new Pager('s'); $pager->SetTotalRecords($recordsCount); $pager->Make(true); $pag = $pager->Render(); $start = $pager->GetIndexRecordStart(); $end = $pager->GetIndexRecordEnd(); } catch (Exception $e) { http://www.php.net/echo $e->getMessage(); } //zapytanie z uwzglenieniem stronicowania $sql = 'select * from newsy limit '.$start.','.($end - $start + 1); //...pobranie wynikĂłw i ich wyswietlenie http://www.php.net/echo $pag;//wyswietlenie pager'a ?>
Przecież pierwszy kod który pokazałeś w poście wyżej nie ma żadnego związku z moim pagerem.
Drugi zaś kod co pokazałeś jest moim kodem na żywca skopiowanym z przykładu.
NIgdzie nie podpiąłeś mojego pagera u siebie więc naprawdę nie wiem skąd te pytania, że coś nie działa, skoro nigdzie nie podpiąłeś mojego pagera
teraz to ja nie rozumiem hahahaha
ten 2gi kod to nie Twoj pager?
bo wsumie to juz sam nie rozumiem..
no to jak mam zrobic, zeby ten moj 1 kod, ktory wyswietla newsy, zastapic Twoim? bo nie widze nic, co bym mogl zrobic, z Tych Twoich plikow..
sora, ale naprwde nie kumam ocb w tym pagerze:)
jakies rozwiazanie? pomoc?
ps: mam tylko w mojej tabeli: id, ile, text
newsy moje potrzebuja tylko id i text, a widze, ze u CIebie jest jeszcze jakeis sortowanie.. kurde nie kminie tego ;p
EDIT:
Hm.. chyba sobie z tym poradzilem:)
teraz sprawdze kilka rzeczy, czy da rade tak jak ja to widze, i dam tu znac:)
EDIT2:
no i wsyzstko smiga, ale strna wyglada jakby wolniej dzialala...
i zostaje tylko juz jedno... jak zrobic aby zamiast >| byl numer ostatniej strony?
i czy mozna tak zrobic ta nawigacje aby wygladala tak:
http://woork.blogspot.com/2008/03/perfect-pagination-style-using-css.html
lub tak:
http://www.thewebhelp.com/css/pagination-style-template/?
pozdrawiam:)
sweitnie, nie pomogles mi w niczym o co pytalem.. dzieki wielkie.
Nie wiem co się stało, ale nagle z dnia na dzień, przestał działać...a nie zmieniałem nic od miesiąca na stronie...
<?php require_once('Pager.class.php'); $sql = 'select count(*) from newsy'; $result = http://www.php.net/mysql_query($sql); $row = http://www.php.net/mysql_fetch_array($result); $recordsCount = $row[0];//pobranie liczby rekordĂłw try{ $pager = new Pager('s'); $pager->SetTotalRecords($recordsCount); $pager->Make(true); $pag = $pager->Render(); $start = $pager->GetIndexRecordStart(); $end = $pager->GetIndexRecordEnd(); } catch (Exception $e) { http://www.php.net/echo $e->getMessage(); } //zapytanie z uwzglenieniem stronicowania $sql = 'select * from newsy limit '.$start.','.($end - $start + 1); //...pobranie wynikĂłw i ich wyswietlenie http://www.php.net/echo $pag;//wyswietlenie pager'a ?>
Parse error: syntax error, unexpected T_CONST, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /Pager.class.php on line 34
Odpalsz skrypt napisany w php5 na php4.
Skoro nagle ci przestało działać to zapewne zmienił ci się php
NIe masz przypadkiem hostingu w 1and1? Tam na dniach właśnie zrobili downgrade z php5 na php4 i kupie ludzi przestały działać aplikacje
dokładnie tam mam hosta..
i co teraz mam zrobić z tym fantem?
a w ogole jaki cel jest takiego downgrade?
Może rozszerzenie *.php5?
Ale jak wywalili php5 to zmiana dostawcy :|
Proszę bardzo.
a nie da się jakoś zrobić aby nie wpisywać rozszerzenia .php5 tylko aby było ,php a żeby plik sam rozpoznał ze to php5?
np żeby coś dopisać na początku pliku .php?
edit:
na 1and1.pl zadziałało, do .htaccess:
Mam problem ze zdefiniowanym linkiem
$oPager = new lib_Pager('pagination', lib_Url::make('main',http://www.php.net/array('page'=>'#PAGE#')),false); //link ma formę link,#PAGE#.html $oPager->SetTotalRecords(10000); $oPager->SetRecordsPerPage(10); $oPager->SetPagesPerNav(10); $oPager->Make(); $this->sNav = $oPager->Render();
Witam serdecznie,
mam taki kod:
try { $tablicailosci = $ms->query_select("SELECT COUNT(id) AS ile FROM baza ;"); } catch (Exception $error) { http://www.php.net/echo '<b>Komunikat</b>: ' . $error->getMessage() . '<br /><b>Plik</b>: ' . $error->getFile() . '<br /><b>Wiersz</b>: ' . $error->getLine() . '<br /><b>IP</b>: ' . $_SERVER['REMOTE_ADDR'] . ' | <b>LINK</b>: ' . $_SERVER['REQUEST_URI'] . '<br /><br />' . $error->getTraceAsString(); } try { //$pager = new Pager($webid['4'], "$url/cars/komis/page/#PAGE#", 'strona'); $pager = new Pager('', "$url/cars/komis/page/#PAGE#"); $pager->RecordsPerPage = 1; $pager->SetTotalRecords($tablicailosci['0']['ile']); $pager->Make(true); $pag = $pager->Render(); $start = $pager->GetIndexRecordStart(); $end = $pager->GetIndexRecordEnd(); } catch (Exception $e) { http://www.php.net/echo $e->getMessage(); }
No ale w $_GET Twój ruter ustawia index page?
Zrób
print_r($_GET);
zapewne go tam nie ma.
Jeśli nie ma to ty będziesz musiał ręcznie dla pagera ustawiać stronę.
tablica jest pusta
Jak ręcznie wstawić pozycję? zamiast #PAGE dać wartość "ręcznie"?
zmieniłem na próbę na coś takiego: $pager = new Pager('', "$url/cars/komis/page/3");
i teraz linki są w formie:
http://localhost/cars/komis/page/3?pp=4
http://localhost/cars/komis/page/3?pp=7
http://localhost/cars/komis/page/3?pp=5
i zaznacza poprawnie... tylko te zmienne są na końcu, a chciałbym żeby były po "page"...
wiesz może dlaczego tak jest?
Nie, masz zostawić wszystko jak było, nic nie kombinuj.
Powiedzialem, że musisz jedynie ręcznie ustawić aktualną strone a ty to źle zrozumiałeś.
Masz zrobić tak:
//..... $pager = new Pager('', "$url/cars/komis/page/#PAGE#"); $pager->SetActualPage(XYZ); //TU ZA XYZ masz wstawić aktualną stronę. Ty ją znasz bo to ty generujesz ładny url i twój ruter ma gdzieś info o page $pager->RecordsPerPage = 1; $pager->SetTotalRecords($tablicailosci['0']['ile']); $pager->Make(true); $pag = $pager->Render(); //.....
zrobiłem tak jak mówiłeś:
$pager = new Pager('', "$url/cars/komis/page/#PAGE#"); $pager->SetActualPage("$url/cars/komis/page/".$webid['4']); $pager->RecordsPerPage = 1; $pager->SetTotalRecords($tablicailosci['0']['ile']); $pager->Make(true); $pag = $pager->Render();
Nie wiem jak ci to wytłumaczyć....
$pager->SetActualPage(TU MASZ WSTAWIĆ LICZBĘ! TĄ LICZBĄ JEST WARTOŚĆ PAGE);
Generujesz taki url: $url/cars/komis/page/#PAGE#
W jego wyniku załóżmy masz taki link dla strony nr 2:
http://blabla/cars/komis/page/4
No i teraz Twój ruter przetwarza ten link i wie, że cars i komis to jakaś tam akcja oraz gdzieś przechowuje parametr page. To ty powinieneś wiedzieć skąd ten parametr wziąść bo ty wiesz jaki masz ruter do adresów a nie ja.
super,działa )) dzięki:)
Witam
Może mi ktoś podpowiedzieć jak pozbyć się błędu:
Parse error: syntax error, unexpected '{' in /homez.184/domciu/www/funcs/ogloszenia/kategorie.php on line 87
try{ $pager_promowane = new Pager('promowane'); $pager_promowane->SetTotalRecords($recordsCount_promowane); $pager_promowane->Make(true); $pag_promowane = $pager_promowane->Render(); $start_promowane = $pager_promowane->GetIndexRecordStart(); $end_promowane = $pager_promowane->GetIndexRecordEnd(); } catch (Exception $e) { http://www.php.net/echo $e->getMessage(); }
Odpalasz to na php4 a powinienes na php5
W pliku .htaccess:
Dla 5.3 :
Mam mały problemik z klasą, mianowicie
Jak zmienić ustawieni linku pagera.
Chodzi mi o to że adres w aktualnościach mam /nowosci/strona/numerstrony z tego sobie wyjmuje id strony działa
Lecz nie wiem ja zrobić aby pager w linku nie dawał idPagera=strona tylko /nowosci/strona/numerstrony
Byłbym wdzięczny za pomoc
Dziękuje
//edit
udąło mi się to zrobić
Hej
Dzięki wielkie za pager - działa świetnie. Mam tylko jedno małe pytanie: jak wyłączyć zapamiętanie ostatniej strony?
Bo działa to tak że przeglądam archiwum newsów, przechodzę na inną stronę i kiedy wracam do strony news, zamiast być na pierwszej stronie i patrzeć na najnowsze newsy, to jestem tam gdzie ostatnio czyli np. na stronie 3.
$pager->SetUseSession(false);
Dziękuje bardzo
Witam,
na wstępie gratuluję klasy - fajnie się z nią pracuje, ułatwia robotę, tak jak być powinno.
Odnoszę jednak wrażenie, że znalazłem błąd. Otóż zależało mi na uzyskaniu tablicy pagera, żeby móc dokonać obróbki po swojej stronie. Lekko zmyliły mnie informacje zawarte w tym temacie (może warto wrzucić najnowsze informacje na górę pierwszego posta? [tak, wiem, to dodatkowa robota dla Ciebie]).
W każdym razie, w końcu doszedłem do tego, że tablica pagera ma być zwracana przez metodę Make(). Zrobiłem var_dump na wyniku jej działania i otrzymałem... true
Bez zbędnego przeciągania:
// końcówka metody Make() return $this->toArray(); // Ok, w związku z tym poszedłem pod wskazany adres i ujrzałem to: // końcówka metody toArray() return true;
return $this->array;
/** * Zwraca tablicę pager'a * * @return array */ public function GetArray() { if (http://www.php.net/is_null($this->indexRecordStart)) throw new Exception(http://www.php.net/sprintf($this->errorMsg['call_get'],'GetArray')); return $this->array; }
Tak... Zauważyłem to oczywiście po napisaniu poprzedniego posta i w momencie, w którym nie miałem przez kilka dni dostępu do internetu. Teraz jedynie zastanawiam się, gdzie przeczytałem informację, że tę tablicę powinna zwracać metoda Make(). Pewnie odnosiło się to do innej wersji lub mam już urojenia - no nieważne - dziękuję za odpowiedź tak czy siak
A da się tak zrobić aby wyświetlało kilka pierwszych stron i kilka ostatnich?
Bo teraz mam coś takiego:
1 2 3 4 5 6 7 8 9 10 11 > >> >|
A chciałbym:
1 2 3 4 5 ... 48 49 50 51 52
Mój kod zwraca pager w postaci jak pokazałeś.
Ale zwraca też tablicę, której są różne informacje, jak np. liczba stron. Mając te dane, może sobie wyświetlać strony jak ci się podoba.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)