Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Algorytmy, klasy, funkcje _ Pager (stronicowanie)

Napisany przez: nospor 15.09.2005, 09:18:52

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:

  1. <?php
  2.    $pager = new Pager('idPagera');
  3.    //okreslenie liczby wszystkich rekordów na 500
  4.    $pager->SetTotalRecords(500);
  5.    http://www.php.net/echo $pager->Render();//wyswietlenie pagera
  6. ?>


Polączenie pagera z pobieraniem rekordów z bazy:
  1. <?php
  2.    $sql = 'select count(*) from TABLE';
  3.    $result = http://www.php.net/mysql_query($sql);
  4.    $row = http://www.php.net/mysql_fetch_array($result);
  5.    $recordsCount = $row[0];//pobranie liczby rekordów
  6.    $pager = new Pager('idPagera');
  7.    $pager->SetTotalRecords($recordsCount);//ustawienie liczby rekordów
  8.    //wygenerowanie pagera i zapamietanie go w zmiennej w celu
  9.    //pozniejszego wyswietlenia
  10.    $renderPager = $pager->Render();
  11.    $start = $pager->GetIndexRecordStart();//pobranie indexu rekordu początkowego
  12.    $end = $pager->GetIndexRecordEnd();//pobranie indexu rekordu koncowego
  13.    //zapytanie z uwzglenieniem stronicowania
  14.    $sql = 'select * from TABLE limit '.$start.','.($end - $start + 1);
  15.    //...pobranie wyników i ich wyswietlenie
  16.    http://www.php.net/echo $renderPager; //wyswietlenie pager'a
  17. ?>

(edit: te przyklady od wersji 2.5 troche inaczej beda wygladac. poprawne kody w paczce)

W podanym przykladzie brakuje oczywiscie sprawdzania, czy dane zapytanie wykonalo sie poprawnie itp. Nie podawałem tego jednak po to, by nie zaciemniać kodu.


Klasa generuje unikalne dla każdego pagera (poprzez idPager'a) zmienne, dzięki czemu na stronie może byc kilka pagerów do różnych tabel. Dodatkow, jesli korzystacie z sesji, klasa pamieta strony w sesji, dzięki czemu nie tracone są informacje o aktualnej stronie przy odwiedzaniu innych linków


Klasa ma 3 sposoby przechodzenia do kolejnych stron:
1) generuje własny wewnetrzny formularz i go submituje
Konstruktor tylko z pierwszym argumentem
2) korzysta z zewnetrznego formularza i musi byc w nim zawarta
Konstruktor z pierwszym i trzecim argumentem. Jako trzeci argument należy podać
idFormularza zawnętrznego
3) poprzez linki. Należy wówczas określić drugi parametr w konstruktorze, który będzie linkiem podstawowym. Do niego dodany będzie parametr odnosnie strony. Ten sposób generuje ogólne zmienne dla pagera, przez co lepiej żeby dla niego na stronie byl tylko jeden pager. Sposób ten może być wykorzystywany przy wyszukiwarkach.

To chyba wszystko. Wszelkiego rodzaju uwagi, sugestie bądź wynalezione błędy proszę zgłaszać. Wysłucham każdej smile.gif

Aha, sposób implemetncji klasy dostosowany do php4. Klasa nie korzysta z żadnych dziwnych funkcji, więc można łatwo dostosować ją do php5. Należy tylko metody i zmienne deklarować w sposób odpowiedni dla php5.

Wszystkie metody i zmienne zaczynajace się na podkreslenie (_) oznaczają, iż są to metody i zmienne prywatne.

A oto przykladowy widok pager'a:
Cytat
|<  <<  <  21  22  23  24  25  26  27  28  29  30  z 200  >  >>  >|

oczywiscie wszystko to linki oprócz aktualnej strony.

Pager jest łatwo konfigurowalny. MOżecie sami okreslic liczbe rekordów na stronie, liczbę stron w pagerze itp.

A pozatym niech wam dobrze służy smile.gif

edit (2006-04-03)
W związku z licznymi uwagami, by klasa nie generowala linkow co x, tylko pare linków przed stroną i parę linków po, wprowadzilem lekkie modyfikacje. Sposób uzywania klasy nie uległ zmianie (jest kompatybilna wstecz smile.gif ). Chcąc użyc nowej metody generowania linków, wystarczy wywołać metodę render() z parametrem true:
  1. <?php
  2. http://www.php.net/echo $pager->Render(true);
  3. ?>

Mam nadzieję, że w ten sposób usatysfakcjonowałem parę osób winksmiley.jpg

edit (2006-06-13)
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 smile.gif
4) no i obecna wersja jest pod php5. Niedlugo dorobie tez wersje pod php4.

Zapraszam do sciagania i testowania.
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.

edit: 2.0 jest juz i pod php4

edit (2006-08-22)
Wersja 2.01:
- 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:
  1. <?php
  2. $pager = new Pager('idPagera', 'wszystkie_numery_#PAGE#');
  3. ?>


- metoda Render moze zwracac teraz tablicę pagera zamiast kodu html. Należy ustawic na true jej trzeci parametr

edit (2007-07-26)
Wersja 2.5. Więcej info tu: http://nospor.pl/pager-2.5.html

Napisany przez: Bakus 15.09.2005, 15:51:32

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?

Napisany przez: nospor 15.09.2005, 16:03:53

@Bakus
Widzę że kod przeanalizowales dokladnie smile.gif. 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 smile.gif

Co do js to zapomnialem dodać, iż jest wymagane smile.gif 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.

Napisany przez: Bakus 18.09.2005, 18:59:50

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)

Napisany przez: nospor 19.09.2005, 08:54:33

mówisz - masz smile.gif

Napisany przez: Bakus 21.09.2005, 15:19:08

cudo biggrin.gif

Napisany przez: OnE.Killer 21.09.2005, 18:11:30

Mam kod ktory pobiera dane z bazy mysql (w tablicy) i wyswietla (while), jak to podpiac do tego questionmark.gif snitch.gif
(jestem poczatkujacy i nie kumam ocb tongue.gif znaczy jakj to zrobic :])

Napisany przez: NuLL 21.09.2005, 18:54:16

Masz wszystko przecież jak wół napisane.

Napisany przez: AxZx 21.09.2005, 19:56:17

wydaje mi sie ze klasa generuje kod HTMl niezgodny ze standardem,

powinno byc &amp; zamiast &

Napisany przez: nospor 22.09.2005, 08:09:56

@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 &amp; . Występuje to tylko w jednym miejscu (linia 114)
Ale dzięki za info smile.gif

Napisany przez: AxZx 22.09.2005, 13:04:25

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.

Napisany przez: nospor 22.09.2005, 13:27:31

Cytat
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.
Dobra, zamieniam. Dzięki za cynk smile.gif

Cytat
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.
A tutaj to chyba cię nie rozumiem.
Są trzy rodzaje linków
<,> - poprzednia/nastepna strona
<<, >> poprzednie/nastepne dziesieć (liczbę tę można regulowac) to jest chyba to oco ci chodzi, czyli kolejne x stron
|<, >| pierwsza/ostatnia strona

Kazdy z tych linków sie pojawia, jezeli ma do czego przeniesc, jesli nie ma do czego przenieśc to sie nie pojawiają. Oto ci chodziło? Bo za bardzo nie widzę problemu w twoim przedstawieniu sprawy

Napisany przez: AxZx 22.09.2005, 13:35:39

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

Kod
|< << < 1 2 3 4 5 6 7 8 9 |10| > >> >|

gdzie |10| to aktualna strona

a ja zapytalem czy nie moze to sie przesuwac
np.
Kod
|< << < 5 6 7 8 9 |10| 11 12 13 14 15 > >> >|


moze takie cos juz jest ?

Napisany przez: nospor 22.09.2005, 13:41:23

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ą smile.gif

Co do & to juz poprawiłem smile.gif.

Napisany przez: AxZx 23.09.2005, 14:00:53

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?

Napisany przez: nospor 23.09.2005, 14:25:27

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 ?

Napisany przez: AxZx 23.09.2005, 14:28:28

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.

Napisany przez: nospor 23.09.2005, 14:34:39

O, i nie można było tak od razu ? smile.gif
Teraz wszystko kumam smile.gif
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 sad.gif

Napisany przez: dr_bonzo 23.09.2005, 15:10:15

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.

Napisany przez: AxZx 23.09.2005, 15:12:28

dobry pomysl

tylko nie kazdy jest takim geniuszem i nie kazdy wie jaka funkcjonalnosc powinna miec taka klasa.

Napisany przez: dr_bonzo 23.09.2005, 15:19:39

Heh, przeciez opisalem funkcjonalnosc tej klasy.

  1. <?php
  2. function _createLink($title, $page, $text)
  3. {
  4.  
  5. TUTAJ
  6. 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.
  7. PHP5: az sie prosi o interfejs.
  8.  
  9. }
  10. ?>

Napisany przez: nospor 24.09.2005, 10:55:23

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.

Napisany przez: sf 24.09.2005, 13:03:37

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.

Napisany przez: AxZx 9.11.2005, 21:11:21

czy trwaja prace nad rozbudowa skryptu?smile.gif

Napisany przez: nospor 12.11.2005, 20:26:50

NIestety nie. Powód ciągle ten sam smile.gif

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)

Napisany przez: basu 26.12.2005, 13:12:33

Czy wiecie jak zrobić/zodyfikować pagera, aby chodził na PDO?
Probuje cos wykombinować, ale opornie mi to wychodzi.

Napisany przez: nospor 26.12.2005, 13:18:18

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

Napisany przez: Diablos 26.12.2005, 14:42:40

A jak zastosowac pagera przy template'ach ? Przykladowo OPT ?

Napisany przez: nospor 26.12.2005, 14:50:22

kurka, jakis dziwny jestem. OPT tez nie uzywalem smile.gif

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

Napisany przez: basu 27.12.2005, 18:24:14

Jednak sobie poradzilem ze stronicowaniem w PDO smile.gif
Problem polegal na tym ,ze $stmt->rowCount() nie dziala poprawnie.
Jesli poprawimy pager na:

  1. <?php
  2. //polaczenie z baza
  3. try 
  4. {
  5.  $db=new PDO('mysql:dbname=table;host=localhost','uzytkownik','haslo');
  6. }
  7. catch (PDOException $e)
  8. {
  9. http://www.php.net/echo 'Brak dostępu do baz danych: '.$e->getMessage();
  10. }
  11.  
  12. $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  13. ?>
  14.  
  15.  
  16.  
  17.  
  18. <?php
  19.  
  20.  // zapytanie o ilosc rekordów
  21.  $stmt = $db->prepare( "SELECT count(*) FROM table" );
  22.  $stmt->execute();
  23.  while($row=$stmt->fetch()) { $ilosc=$row[0]; }
  24.  $recordsCount = $ilosc;//pobranie liczby rekordów
  25.  $pager = new Pager('idPagera');
  26.  $pager->setRecordsCount($recordsCount);//ustawienie liczby rekordów
  27.  //wygenerowanie pagera i zapamietanie go w zmiennej w celu 
  28.  //pozniejszego wyswietlenia
  29.  $renderPager = $pager->render();
  30.  $start = $pager->getStartRecord();//pobranie indexu rekordu początkowego
  31.  $end = $pager->getEndRecord();//pobranie indexu rekordu koncowego 
  32.  //ustawnienie zmiennej $koniec : LIMIT ($start,->$koniec<-)
  33.  $koniec = $end - $start + 1;
  34. //zapytanie z uwzglenieniem stronicowania
  35. //...pobranie wyników i ich wyswietlenie
  36. $stmt=$db->prepare("SELECT Kolumna FROM table LIMIT $start, $koniec");
  37. $stmt->execute();
  38. $stmt->bindColumn("Kolumna", $kolumna);
  39. while($stmt->fetch(PDO::FETCH_BOUND))
  40. {
  41. http://www.php.net/echo $kolumna."<br>";
  42. }
  43.  
  44.  
  45.  http://www.php.net/echo $renderPager; //wyswietlenie pager'a
  46.  
  47. ?>


to chodzi idealnie smile.gif. Polecam ten pager, dobrze sie sprawuje.

Prosze uzywac bbCode - NuLL

Napisany przez: nospor 28.12.2005, 20:43:14

Cytat
Jesli poprawimy pager na:
Ja tylko sprostuje. Tutaj ty nie poprawiles pager'a, tylko kod, który zapodaje dane do pagera i korzysta z jego danych. A dokladniej mowiac dostosowales go do PDO. Kod klasy Pager nie ulegl zadnej zmianie smile.gif

Napisany przez: basu 28.12.2005, 20:57:42

w sumie racja smile.gif
ale najwazniesze ze chodzi.

Za nabijanie postow sa ostrzezenia.... - NuLL

Napisany przez: SongoQ 28.12.2005, 22:42:28

Cytat
Problem polegal na tym ,ze $stmt->rowCount() nie dziala poprawnie.

Jak bys zagladnal do manuala to bys zobaczyl ze dziala poprawnie.

Cytat
PDOStatement::rowCount() returns the number of rows affected by the last DELETE, INSERT, or UPDATE statement executed by the corresponding PDOStatement object.

Napisany przez: bigZbig 25.01.2006, 12:22:53

@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.

Napisany przez: nospor 3.02.2006, 10:02:31

Cytat
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.
Juz podobne głosy padły wcześniej. To jednak faktycznie by się przydało (wczesniej mialem troche inne zdanie na ten temat). Początkowo klasą była robione w javie pod konkretny projekt w jsf, potem potrzebowalem szybko pagera w php i na szybko przerobilem. Zaowocowalo to pewnymi sztywnymi rzeczami jak ten kod html.

Cytat
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.
To juz by zostalo rozwiazane samo, gdyby byla mozliwość wlasnej generacji html (patrz punkt wyzej). Wowczas by se kazdy smazyl jeszcze co by chcial.

Cytat
Niejednolite nazewnictwo raz $nazwa_zmiennej a innym razem $nazwaZmiennej i to bez uzasadnienia. Przynajmniej nie dojrzalem szczegolnego powodu.
Tak, to moje zwykłe niedopatrzenie.

Cytat
W Twojej klasie jest jeszcze jeden mankament. Nie ma mozliwosci zmiany tekstow
To rownież by zostalo rozwiązane przez mozliwość definiowania wlasnego html

Cytat
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.
Sluszna uwaga.

Cytat
Skoro mamy PHP5 i Ajaxa mozna pomyslec o przyszlosci
hehe, przeginasz... winksmiley.jpg (żartuję).

Wszystkie uwagi zapisalem se w mej pamięci. jej czyszczenia nie przewiduję w najbliższym czasie winksmiley.jpg. Niestety natłok innych obowiązków i probelmów, odsuwa rozwój tej klasy w przyyyyyszłość... Ale pare osób już jej używa i nie narzeka winksmiley.jpg

Napisany przez: Fallout 28.02.2006, 05:55:16

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 smile.gif

oto kod mojej "galerii":

  1. <?php
  2.  
  3. include 'db_engine.php';
  4.  
  5. $pid = (int)$_GET['p'];
  6.  
  7. $db = new dbengine();
  8. $db->polacz();
  9.  
  10. if(http://www.php.net/isset($_GET['gid'])and(!http://www.php.net/isset($_GET['fid'])))
  11. {
  12. $gid = (int)$_GET['gid'];
  13. $db->DoSql("SELECT galeria_katalog FROM galerie WHERE galeria_id = $gid");
  14. $kat = http://www.php.net/mysql_result($db->wynik,0,0);
  15. $dir = './zdjecia/'.$kat.'/mini/';
  16. $db->DoSql("SELECT * FROM zdjecia WHERE galeria_id = $gid AND pies_id = $pid");
  17. $res = $db->wynik;
  18. while($r=http://www.php.net/mysql_fetch_array($res))
  19. {
  20. $fname = $r['zdjecie_plik'];
  21. $fid  = $r['zdjecie_id'];
  22. $mini = $dir.$fname;
  23. //echo $fname.'<br>'.$fid.'<br>'.$mini;
  24. // sprawdza czy istnieje wpis w bazie
  25. if($fid<>0)
  26. {
  27. // sprawdza czy miniatrua istnieje
  28. if(http://www.php.net/file_exists($mini))
  29. {
  30. $link = "<a href=\"?s=galerie&amp;gid=$gid&amp;fid=$fid&amp;p=$pid\">";
  31. http://www.php.net/echo $link."<img src=\"$mini\" border=\"1\"></a>&nbsp;\n";
  32. }
  33. else // jesli nie, to ją generuje i wyswietla
  34. {
  35. http://www.php.net/echo "Brak miniatury";
  36. }
  37. }
  38. else http://www.php.net/echo "Brak wpisu w bazie dla wybranego pliku!<br>\n";
  39. }
  40. }
  41. elseif(http://www.php.net/isset($_GET['gid'])and(http://www.php.net/isset($_GET['fid']))) // pokazuje wybrane zdjecie
  42. {
  43. $gid = (int)$_GET['gid'];
  44. $fid = (int)$_GET['fid'];
  45. $db->DoSql("SELECT galeria_katalog FROM galerie WHERE galeria_id = $gid");
  46. $kat = http://www.php.net/mysql_result($db->wynik,0,0);
  47. $dir = './zdjecia/'.$kat.'/';
  48.  
  49. $db->DoSql("SELECT Count(*) FROM zdjecia WHERE galeria_id = $gid AND pies_id = $pid");
  50. $ile_zdjec = http://www.php.net/mysql_result($db->wynik,0,0);
  51. if($ile_zdjec==0)
  52. {
  53. http://www.php.net/echo "Brak zdjęć";
  54. }
  55. else
  56. {
  57. http://www.php.net/echo '<div align="center"><a href="?s=galerie&amp;gid='.$gid.'&amp;p='.$pid.'">';
  58. http://www.php.net/echo '<img src="buttony/powrotdogalerii.jpg" border="0"></a></div>';
  59. include 'pager.php';
  60. $pager = new Pager('galeria');
  61. $pager->$_recordsOnPage = 1;
  62. $pager->$_startRecord = $fid;
  63. $pager->setRecordsCount($ile_zdjec);
  64. $renderPager = $pager->render();
  65. $start = $pager->getStartRecord();
  66. $end = $pager->getEndRecord();
  67. $sql = 'SELECT * FROM zdjecia WHERE galeria_id = '.$gid.' AND pies_id = '.$pid.' LIMIT '.$start.','.($end - $start + 1); 
  68. $db->DoSql($sql);
  69. $res=$db->wynik;
  70.  
  71. while($r = http://www.php.net/mysql_fetch_array($res))
  72. {
  73. $opis = $r['zdjecie_opis'];
  74. $plik = $r['zdjecie_plik'];
  75.  
  76. http://www.php.net/echo "<br /><img src=\"$dir$plik\" border=\"1\"><br />$opis<br />";
  77. }
  78. http://www.php.net/echo $renderPager;  
  79. }
  80. }
  81. else 
  82. {
  83. $db->DoSQL("SELECT * FROM galerie WHERE galeria_id <> 4");
  84. $db->NRows;
  85. $w = $db->wynik;
  86. $n = $db->rows;
  87. while ($r=http://www.php.net/mysql_fetch_array($w))
  88. {
  89. $id  = $r['galeria_id'];;
  90. $pies = $r['pies_id'];
  91. $opis = $r['galeria_nazwa'];
  92. $img = $r['galeria_obrazek'];
  93.  
  94. $scr = "<img src=\"buttony/$img\" border=\"0\" alt=\"$opis\">";
  95. http://www.php.net/echo "<a href=\"index.php?s=galerie&amp;gid=$id&amp;p=$p\">".$scr."</a><br />";
  96. }
  97.  
  98. $db->rozlacz();
  99.  
  100. }
  101. ?>


zmienna identyfikatora fotki to $fid, moze Wy macie jakis pomysl, bo kazda proba konczy sie tym ze pager nie dziala sad.gif Narazie dziala, ale kilkanie danej miniatury
powoduje ze pager i tak zaczyna od pierwszej fotki..

mam wrazenie, ze to chyba niewykonalne bez zmiany cos w pagrze :/ a zalezy mi na czasie sad.gif no chyba ze cos ja przegapilem :/ mam nadzieje ze cos poradzicie, bo ja sie juz poddalem :]

pozdrawiam
Marcin

Napisany przez: nospor 28.02.2006, 09:21:51

  1. <?php
  2. $pager->$_startRecord = $fid;
  3. ?>
To nie tak dziala smile.gif
ty nie musisz przypisywac od jakiego rekordu ma zaczynac. Wrecz nie mozesz, gdy z zmienna ta jest wyliczana na podstawie aktualnej strony i jest pozniej nadpisywana winksmiley.jpg
pomine juz fakt ze źle dobierasz się do zmiennych klasy. nie:
  1. <?php
  2. $pager->$_recordsOnPage = 1;
  3. $pager->$_startRecord = $fid;
  4. ?>


a:
  1. <?php
  2. $pager->_recordsOnPage = 1;
  3. $pager->_startRecord = $fid;
  4. ?>
Widać rożnicę?Dochodzi do tego jeszcze fakt ze nie mozesz przyspisac startRekord i skraca sie to do:
  1. <?php
  2. $pager->_recordsOnPage = 1;
  3.  
  4. ?>
smile.gif
Teraz dziala?

Napisany przez: Fallout 5.03.2006, 12:24:05

Hehe, wierze na słowo bo nie wiem czemu mimo zeby mnie powiadamilo o odp to nic mi nie przyszlo wiec nie zagladalem smile.gif W miedzy czasie napisalem sobie to wszystko od nowa i nie korzystajac z Twojego pagera smile.gif Choc zostal na ksiazce gosci, gdzie sprawuje sie znakomicie smile.gif

A mój sposób? Oto on:

  1. <?php
  2.  
  3. include 'db_engine.php';
  4.  
  5. $db = new dbengine();
  6. $db->polacz();
  7.  
  8. $pid = (int)$_GET['p']; // id psa
  9. $gid = (int)$_GET['gid']; // id galerii
  10. $eid = (int)$_GET['eid']; // koniec
  11. $cid = (int)$_GET['cid']; // wybrana fotka
  12. // pobranie zdjec
  13. $lsql = 'SELECT * FROM zdjecia WHERE galeria_id = '.$gid.' AND pies_id = '.$pid;
  14. $db->DoSql($lsql);
  15. $lres=$db->wynik;
  16. // pobranie katalogu
  17. $db->DoSql("SELECT galeria_katalog FROM galerie WHERE galeria_id = $gid");
  18. $kat = http://www.php.net/mysql_result($db->wynik,0,0);
  19. $dir = './zdjecia/'.$kat.'/';
  20. $dir_mini = './zdjecia/'.$kat.'/mini/';
  21. // wypelnienie tablicy danymi
  22. $temp = http://www.php.net/array();
  23. $count = 0;
  24. while($r = http://www.php.net/mysql_fetch_array($lres))
  25. {
  26. $opis = $r['zdjecie_opis'];
  27. $plik = $r['zdjecie_plik'];
  28. $dane = http://www.php.net/array($count,$dir.$plik,$opis,$dir_mini.$plik);
  29. $temp[$count] = http://www.php.net/implode(',',$dane); 
  30. $count++;
  31. }
  32. $lista = $temp;
  33.  
  34. if(http://www.php.net/isset($_GET['gid'])and(!http://www.php.net/isset($_GET['cid']))) // wyswwietla miniatury
  35. {
  36. if($count<>0)
  37. {
  38. foreach($lista as $id)
  39. {
  40. $data = http://www.php.net/explode(',',$id);
  41. $cid = $data[0]; // id
  42. $plk = $data[1]; // plik
  43. $ops = $data[2]; // opis
  44. $min = $data[3]; // mini
  45.  
  46. if(http://www.php.net/file_exists($min))
  47. {
  48. $link = "<a href=\"?s=galerie&amp;gid=$gid&amp;eid=$count&amp;cid=$cid&amp;p=$pid\">";
  49. http://www.php.net/echo $link."<img src=\"$min\" border=\"1\"></a>&nbsp;\n";
  50. }
  51. }
  52. }
  53. else http://www.php.net/echo '<br /><img src="buttony/brakzdjec.jpg"><br /><br />';
  54. }
  55. elseif(http://www.php.net/isset($_GET['gid'])and(http://www.php.net/isset($_GET['cid']))) // pokazuje wybrane zdjecie
  56. {
  57. $dane = $lista[$cid];
  58. $data = http://www.php.net/explode(',',$dane);
  59. $cid = $data[0]; // id
  60. $plk = $data[1]; // plik 
  61. $ops = $data[2]; // opis
  62. $min = $data[3]; // mini
  63.  
  64. if(http://www.php.net/file_exists($min))
  65. {
  66. $next='';
  67.  
  68. if($cid+1<$eid)
  69. {
  70. $ncid = $cid+1;
  71. $next ='<a href="?s=galerie&amp;gid='.$gid.'&amp;p='.$pid.'&amp;cid='.$ncid.'&amp;eid='.$count.'">';
  72. $next.='<img src="buttony/nav_1a.jpg" border="0"></a>';
  73. }
  74.  
  75. $prev='';
  76.  
  77. if($cid-1>0)
  78. {
  79. $pcid=$cid-1;
  80. $prev='<a href="?s=galerie&amp;gid='.$gid.'&amp;p='.$pid.'&amp;cid='.$pcid.'&amp;eid='.$count.'">';
  81. $prev.='<img src="buttony/nav_1b.jpg" border="0"></a>';
  82. }
  83.  
  84. http://www.php.net/echo '<div align="center">'.$prev;
  85. http://www.php.net/echo '<a href="?s=galerie&amp;gid='.$gid.'&amp;p='.$pid.'">';
  86. http://www.php.net/echo '<img src="buttony/powrotdogalerii.jpg" border="0"></a>';
  87. http://www.php.net/echo $next.'</div>';
  88.  
  89. http://www.php.net/echo '<img src='.$plk.' border="1"><br /><b>'.$ops.'</b>';
  90. }
  91. }
  92. else // wyswietlenie listy galerii
  93. {
  94. $db->DoSQL("SELECT * FROM galerie WHERE galeria_id <> 4");
  95. $db->NRows;
  96. $w = $db->wynik;
  97. $n = $db->rows;
  98. while ($r=http://www.php.net/mysql_fetch_array($w))
  99. {
  100. $id  = $r['galeria_id'];;
  101. $pies = $r['pies_id'];
  102. $opis = $r['galeria_nazwa'];
  103. $img = $r['galeria_obrazek'];
  104.  
  105. $scr = "<img src=\"buttony/$img\" border=\"0\" alt=\"$opis\">";
  106. http://www.php.net/echo "<a href=\"index.php?s=galerie&amp;gid=$id&amp;p=$p\">".$scr."</a><br />";
  107. }
  108. }
  109.  
  110. ?>


I mam pytanie, czy to nie jest efektywniejsze?
Jedyna wada, ze nie ma menu 1..n, ale nastepny/poprzedni co 10 itp. latwo zrobic..
jesli oftop to usune smile.gif

Napisany przez: nospor 6.03.2006, 16:37:42

Cytat
I mam pytanie, czy to nie jest efektywniejsze?
Zazwyczaj zamienienie klasy na bezposredni kod jest efektywniejsze (o ile sie nic nie zepsuje po drodze winksmiley.jpg ). Klasa ma za zadanie ulatwic i przysieszyc pisanie aplikacji, a nie odkrywać ciągle wszystko na nowo. Często klasy uogolniają wiele sytuacji, przez co mozna je stosowac w szerszym zakresie, ale to powoduje zmniejszenie wydajności (w mniej lub większy sposó winksmiley.jpg )

Co do Twojego skryptu, to nie mam sily/czasu go analizowac. Ale jesli ci dziala i ci wystarcza, to uzywaj do woli winksmiley.jpg No i napewno ma zdecydowanie mniej kodu niz moja klasa smile.gif

Napisany przez: Legro 19.03.2006, 12:24:52

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 winksmiley.jpg



moj kod jest taki:

  1. <?php
  2.  
  3. $dowcipy = http://www.php.net/mysql_query (" Select * From `dowcipy` Where `akt_d` = '1' and `kat_d` = '{$_GET['id_kat']}' ");
  4. $num_row = http://www.php.net/mysql_num_rows ( $dowcipy );
  5.  
  6. if ( $num_row != 0 ) {
  7.  
  8. while ( $r_dowcipy = http://www.php.net/mysql_fetch_array ( $dowcipy, MYSQL_ASSOC )) {
  9.  
  10. $list_dowcipy .= ( http://www.php.net/nl2br ( $r_dowcipy['tresc_d'] ) . '<br /><br />' ); 
  11.  
  12. }
  13.  
  14. $template -> setValue ('lista_dowcipow', $list_dowcipy);
  15.  
  16. } else {
  17.  
  18. $template -> setValue ('lista_dowcipow', 'Brak dowcipów w kategorii.');
  19.  
  20. }
  21.  
  22. ?>



To jest kod do wyswietlana... i chcialbym aby na stronie bylo po 10 wpisow.

Napisany przez: Levabul 19.03.2006, 13:04:30

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

Kod
Error: Division by zero
czy jakoś tak tongue.gif. Poprawna linia 128:
  1. <?php
  2. $this->_pagesOnNav = $pon;
  3. ?>

Napisany przez: nospor 19.03.2006, 15:44:25

@legro w pierwszym poscie masz co i jak...

  1. <?php
  2.  
  3. $sql = "select count(*) from dowcipy Where `akt_d` = '1' and `kat_d` = '{$_GET['id_kat']}'  " ;
  4.    $result = http://www.php.net/mysql_query($sql);
  5.    $row = http://www.php.net/mysql_fetch_array($result);
  6.    $num_row = $row[0];//pobranie liczby rekordów
  7.    $pager = new Pager('idPagera');
  8.    $pager->setRecordsCount($num_row);//ustawienie liczby rekordów
  9.    //wygenerowanie pagera i zapamietanie go w zmiennej w celu 
  10.    //pozniejszego wyswietlenia
  11.    $renderPager = $pager->render();
  12.    $start = $pager->getStartRecord();//pobranie indexu rekordu początkowego
  13.    $end = $pager->getEndRecord();//pobranie indexu rekordu koncowego
  14.    //zapytanie z uwzglenieniem stronicowania
  15.    $sql = "select * from dowcipy Where `akt_d` = '1' and `kat_d` = ".$_GET['id_kat']."   limit ".$start.','.($end - $start + 1); 
  16.    //...pobranie wyników i ich wyswietlenie, czyli twoj kod:
  17. $dowcipy = http://www.php.net/mysql_query($sql);
  18. if ( $num_row != 0 ) {
  19.  
  20. while ( $r_dowcipy = http://www.php.net/mysql_fetch_array ($dowcipy , MYSQL_ASSOC )) {
  21.  
  22. $list_dowcipy .= ( http://www.php.net/nl2br ( $r_dowcipy['tresc_d'] ) . '<br /><br />' ); 
  23.  
  24. }
  25.  
  26. $template -> setValue ('lista_dowcipow', $list_dowcipy);
  27.  
  28. } else {
  29.  
  30. $template -> setValue ('lista_dowcipow', 'Brak dowcipów w kategorii.');
  31.  
  32. }
  33. //////
  34.  
  35.    http://www.php.net/echo $renderPager; //wyswietlenie pager'a
  36.  
  37.  
  38. ?>


@Levabul wielkie dzięki smile.gif nie wiem skąd ta literowka sie tam wytrzasnęła

Napisany przez: Legro 19.03.2006, 16:48:58

@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:

  1. <?php
  2.  
  3. $template -> setValue ('pages', $renderPager);
  4.  
  5. ?>


Zamiast tak
  1. <?php
  2. http://www.php.net/echo $renderPager;
  3. ?>


Da sie to jakos zastapic? Aby mi dzialalo to co najpierw podalem? Chce to wrzucic do szablonu w inne miejsce :/

Pozdrawiam.

Napisany przez: bohusz 28.03.2006, 17:58:16

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.

  1. <?
  2. $ile = http://www.php.net/mysql_num_rows(http://www.php.net/mysql_query("SELECT * FROM $ogloszenia_table $where"));
  3. $result = http://www.php.net/mysql_query("SELECT * FROM $ogloszenia_table $where LIMIT $limit,$og_limit");
  4.  
  5. while($r = http://www.php.net/mysql_fetch_array($result)){
  6. $id = $r['id'];
  7. $cat = $r['cat'];
  8. $title = $r['title'];
  9. $img1 = $r['img1'];
  10. $date = $tbl['date'];
  11. 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 = ''; }
  12. http://www.php.net/echo'<fieldset>'.$photo.'Fotoanons: <br /><a href="lista.php?id='.$id.'">'.$title.'</a></fieldset><br />';
  13. }
  14. if($ile == '0'){ http://www.php.net/echo'brak wyniku'; }
  15.  
  16.  
  17. ?>


Jeszcze raz z góry dziękuję

Napisany przez: nospor 28.03.2006, 19:50:43

  1. <?php
  2.  
  3. $sql = "SELECT count(*) FROM $ogloszenia_table $where";
  4.    $result = http://www.php.net/mysql_query($sql);
  5.    $row = http://www.php.net/mysql_fetch_array($result);
  6.    $recordsCount = $row[0];//pobranie liczby rekordów
  7.    
  8.  $pager = new Pager('idPagera');
  9.    $pager->setRecordsOnPage($og_limit);
  10.    $pager->setRecordsCount($recordsCount);//ustawienie liczby rekordów
  11.    //wygenerowanie pagera i zapamietanie go w zmiennej w celu 
  12.    //pozniejszego wyswietlenia
  13.    $renderPager = $pager->render();
  14.    $start = $pager->getStartRecord();//pobranie indexu rekordu początkowego
  15.    $end = $pager->getEndRecord();//pobranie indexu rekordu koncowego
  16.    //zapytanie z uwzglenieniem stronicowania
  17.    $sql = "SELECT * FROM $ogloszenia_table $where limit ".$start.','.($end - $start + 1);
  18.    $result = http://www.php.net/mysql_query($sql); 
  19.    while($r = http://www.php.net/mysql_fetch_array($result)){
  20. $id = $r['id'];
  21. $cat = $r['cat'];
  22. $title = $r['title'];
  23. $img1 = $r['img1'];
  24. $date = $tbl['date'];
  25. 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 = ''; }
  26. http://www.php.net/echo'<fieldset>'.$photo.'Fotoanons: <br /><a href="lista.php?id='.$id.'">'.$title.'</a></fieldset><br />';
  27. }
  28.    http://www.php.net/echo $renderPager; //wyswietlenie pager'a
  29. if($recordsCount == ){ http://www.php.net/echo'brak wyniku'; }
  30.  
  31. ?>
widze ze dales duzo rekordow na stronie: 150. wow winksmiley.jpg

ps: zaraz usune wiekszą czesc Twego kodu, gdyz generowanie formularza nam do szczescia nie jest potrzebne smile.gif
ps2: i uzywaj na przyszlosc wlasciwego bbcode

Napisany przez: acztery 1.04.2006, 15:18:48

ś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:

  1. <?php
  2.  
  3.  $sql="SELECT COUNT(patch) as ile FROM prg  WHERE patch LIKE '%$CAT%'";
  4.  $result = http://www.php.net/mysql_query($sql);
  5.  $recordsCount = http://www.php.net/mysql_result($result,0,"ile"); 
  6.  
  7. ?>

Napisany przez: nospor 3.04.2006, 10:40:46

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ść smile.gif
Sposób uzywania klasy nie uległ zmianie (jest kompatybilna wstecz smile.gif ). Chcąc użyc nowej metody generowania linków, wystarczy wywołać metodę render() z parametrem true:

  1. <?php
  2. http://www.php.net/echo $pager->Render(true);
  3. ?>

Mam nadzieję, że w ten sposób usatysfakcjonowałem parę osób winksmiley.jpg

edit: jesli ktos nie wie o jakich zmianach mowie, to zacytuje jednego z uzytkowników:
Cytat
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.
a co do linkow to chodzi mi o cyfry

teraz jest
CODE

|< << < 1 2 3 4 5 6 7 8 9 |10| > >> >|


gdzie |10| to aktualna strona

a ja zapytalem czy nie moze to sie przesuwac
np.
CODE

|< << < 5 6 7 8 9 |10| 11 12 13 14 15 > >> >|



moze takie cos juz jest ?
No i teraz juz tak jest

Napisany przez: acztery 3.04.2006, 11:40:38

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ż?

Napisany przez: nospor 3.04.2006, 11:43:40

Cytat
jeszcze zapamietywanie podstron w sesjach i bedzie perfekto
No przecież to jest smile.gif proponuję przeczytac opis klasy na początku kody, oraz posty w topicu. Zapamietywanie w sesji bylo przez caly czas. Co poniektórzy chcieli by mozna bylo to wyłączyc, więc dorobilem i tę mozliwość. ale domyslnie jest wlączone zapamietywanie w sesji. Moze ty nie startujesz sesji i dlatego ci nie dziala winksmiley.jpg

Napisany przez: acztery 3.04.2006, 11:45:07

tak masz racje nie mam session_start()


a co z tym 1 wolnym uruchomieniem

Napisany przez: nospor 3.04.2006, 11:48:08

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.

Napisany przez: acztery 3.04.2006, 11:52:31

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

Napisany przez: nospor 3.04.2006, 11:54:43

Cytat
trzeba definiowac id pagera
No tak. Przy inicjacjalizacji pagera zapodajesz unikalne dla niego id. Po tym wlasnie id jest rozpoznawany dany pager. Jesli chcesz miec pager unikalny dla kazdej kategorii, to musisz w id to rozróżnic, poprzez np. id kategori jako przedrostek lub cos w tym stylu. Wowczas dla kazdej kategorii, będzie pamietany stan Pager'a

Napisany przez: acztery 3.04.2006, 11:56:42

wypas super robota

Napisany przez: nospor 13.06.2006, 16:08:47

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 smile.gif
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.

Napisany przez: bigZbig 18.07.2006, 11:30:39

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:

W kazdym razie to, co robi metoda _createLink jet moim zdaniem praca dla dwoch zewnetrznych, wyspecjalizowanych klas (router i view).

Napisany przez: nospor 18.07.2006, 11:41:34

Cytat
Moim zdaniem dane niezbedne do pracy pagera powinny byc przekazywane do konstruktora (np. w postaci tablicy config).
W zasadzie to tylko liczba rekordow jest potrzebna. Faktycznie moze byc w konstruktorze.

Cytat
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:
liczbe stron,
liczbe elementow na stronie,
indeks poczatkowy,
indeks koncowy,
tablice odsylaczy do kolejnych stron,
komplet odsylaczy: do przodu, do tylu, na poczatek, na koniec itd.
NIe wiem czy cie dobrze zrozumialem, ale to wszystko teraz przeciez jest. Kazdy moze napisac sobie wlasna klase dziedziczącą po Pager i napisac wlasna metode do generowania html, kazdy moze napisac metode zewnetrzną i zapodac ja do Pagera. kazda z tych metod dostaje wlasnie surowe dane w postaci tablicy

Cytat
W kazdym razie to, co robi metoda _createLink jet moim zdaniem praca dla dwoch zewnetrznych, wyspecjalizowanych klas (router i view).

_createLink jest tylko i wylacznie w celu domyslnego generowania pagera. kazdy kto chce sobie generowac wlasny pager Tworzy wlasne metody. Tu nie ma problemu

Co do nice urls to bede musial z czasem sie przyjrzec temu smile.gif
Dzieki za uwagi.

Napisany przez: bigZbig 18.07.2006, 11:55:51

Cytat(nospor @ 18.07.2006, 12:41 ) *
NIe wiem czy cie dobrze zrozumialem, ale to wszystko teraz przeciez jest. Kazdy moze napisac sobie wlasna klase dziedziczącą po Pager i napisac wlasna metode do generowania html, kazdy moze napisac metode zewnetrzną i zapodac ja do Pagera. kazda z tych metod dostaje wlasnie surowe dane w postaci tablicy
Chodzi wlasnie o ten domyslny widok. Wylacz to do osobnej klasy i napisz do niej interfejs (bedzie to cos w rodzaju wzoru tyle, ze zamiast klasy abstrakcyjnej napiszesz w pelni funkcjonalna). Jak ktos bedzie chcial sobie napisac swoj widok to albo wydziedziczy Twoja klase, albo napisze od nowa jednak implementujac odpowiedni interfejs. Jak bedzie chcial uzyc szablonu to zrobi to tak jak to umozliwiles teraz czyli pobierze sobie "surowe" dane i wstawi do szablonu.

Napisany przez: nasty_psycho 2.08.2006, 10:28:01

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.

Napisany przez: nospor 2.08.2006, 10:32:52

@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

Napisany przez: AxZx 11.08.2006, 12:51:53

kiedy mozna (czy wogole mozna) spodziewac sie tej klasy dla php 4?

Napisany przez: nospor 11.08.2006, 16:22:26

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.

Napisany przez: hugonot 12.08.2006, 15:03:17

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...) sad.gif
Co mam zrobic? Pomocy!!!
Joanna

Napisany przez: nospor 12.08.2006, 15:21:09

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 smile.gif

edit: widze ze topic juz zalozylas. Posta ponizej wiec usuwam

Napisany przez: AxZx 16.08.2006, 16:40:04

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?

Napisany przez: nospor 16.08.2006, 17:04:06

@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.

Napisany przez: AxZx 16.08.2006, 17:53:34

hmm chcialbym moc wprowadzic jak ma wygladac url

  1. <?php
  2. $url = 'wszystkie_numery_';
  3. ?>


chcialbym tez ustawic z jakiej zmiennej $_GET ma pobierac na ktorej stronie wlasnie jest

  1. <?php
  2. $get = $_GET['page'];
  3. ?>


wiem ze niektore opcje mozna ustawic, ale troche pogmatwane to
i jeszcze ten = przeszkadza w generowaniu adresu

Napisany przez: nospor 21.08.2006, 13:46:37

@AxZx z racji ze szerzych po różnych topicach nieprawdziwe plotki to pisze tutaj tongue.gif
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.

Napisany przez: nasty_psycho 21.08.2006, 18:31:05

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 winksmiley.jpg) link co wyglada tak: "java script:doNavigateToPage(<page-id>);".

Mysle ze zalapiesz o co mi chodzi.
Pozdrawiam

Napisany przez: AxZx 21.08.2006, 18:40:51

chyba chodzi ci o to samo o co mnie:)
balon wlasnie cos takiego zrobil w swojej klasie

Napisany przez: nospor 22.08.2006, 07:26:36

co za lenie.... tongue.gif

Dobra, leniwy klient nasz Pan. Sie dorobi. To zaden problem.

Napisany przez: bigZbig 22.08.2006, 07:35:03

@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 winksmiley.jpg o tyle propozycja nasty_psycho bardziej przyjazna dla uzytkownika.

Napisany przez: nospor 22.08.2006, 16:47:28

@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 winksmiley.jpg

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:

  1. <?php
  2. $pager = new Pager('idPagera', 'wszystkie_numery_#PAGE#');
  3. ?>


- metoda Render moze zwracac teraz tablicę pagera zamiast kodu html. Należy ustawic na true jej trzeci parametr

Napisany przez: AxZx 22.08.2006, 17:00:37

fantastycznie:)
coraz lepsza klasa

a nie lepiej zrobic metode do ktorej wrzucamy parametr ktory bedzie wlasnie tym URLem ?

cos jak

  1. <?php
  2. $pager->SetUrl('wszystkie_strony_#PAGE#');
  3. ?>

Napisany przez: nospor 22.08.2006, 17:02:31

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 winksmiley.jpg

Napisany przez: nasty_psycho 23.08.2006, 17:53:06

Cytat
O ile moja propozycja wydaje mie sie bardziej profesjonalna winksmiley.jpg o tyle propozycja nasty_psycho bardziej przyjazna dla uzytkownika.

Mi sie wydaje ze w tym wypadku uzycia stratego byloby przerostem formy nad trescia, i to bardzo. bo tu niema bardzo skomplikowanych czy wyspecjalizowanych konfiguracji jak np. ta klasa log-ow co byla tu kilka dni temu (SimpleLog).

Napisany przez: bigZbig 24.08.2006, 10:34:38

@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.

Napisany przez: AxZx 24.08.2006, 11:02:44

gdzie mozna nauczyc sie takiego fachu ?smile.gif

Napisany przez: nasty_psycho 24.08.2006, 16:02:29

Cytat(bigZbig @ 24.08.2006, 11:34 ) *
@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.


Ok, ale przecietny uzytkownik tej klasy, (w mojej opinji), nie bedzie chcial/umiec pisac klasy implementujace ten interface. I dalem przyklad SimpleLog, bo tam sie ustala format pisania loga, czyli nieda sie jedna opcja ustalic czy to bedze text, xml czy moze arkusz exela, ale w klasie Pager, jest tylko jedna konfiguracja ktora sie podaje w postaci stringu, myslac o interfajsie, jakie beda tak funkcje? np. get format, czyli zwracanie stringa z formatek linku. A po nosporowemu ( tongue.gif oko za oko ~nospor biggrin.gif ), to sobie idziesz na skruty, i tylko podajesz stringa, bo funkcja generujaca ten link juz jest zrobiona.



Cytat
gdzie mozna nauczyc sie takiego fachu ? smile.gif


O co ci chodzi ? bo nie bardzo lapie ? tongue.gif







Pozdrawiam

Napisany przez: Lee 24.08.2006, 16:39:24

Nie mam zielonego pojęcia jak to ze smarty połączyć sadsmiley02.gif 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 worriedsmiley.gif

Napisany przez: AxZx 24.08.2006, 17:31:28

Cytat(nasty_psycho @ 24.08.2006, 15:02 ) *
O co ci chodzi ? bo nie bardzo lapie ? tongue.gif


o to :

Cytat(bigZbig @ 24.08.2006, 09:34 ) *
Trzeba jedynie rozumiec idee OOP i umiec pisac do interfejsu.

Napisany przez: nospor 24.08.2006, 17:46:54

Cytat
Nie mam zielonego pojęcia jak to ze smarty połączyć

W wersji 2.01 przy wywolaniu metody Render() ustaw 3 parametr na true, to ci zwroci tablice. Te tablice se assign na smarty i w smarty generuj pager.
Albo wywolaj normalnie Render() zwroci ci kod html i ten kod html assign do smarty i go tylko tam wyswietlisz:)

Cytat
W ogóle nie kapuje stronicowania
No stronicowanie polega na dzieleniu na informacji na stronie. Tak jak tu w topicu. zamiast wyswietlic 100 postow na raz, to wyswietlane jest kawalkami po 20 postow. Ot i cala filozofia

Napisany przez: Lee 24.08.2006, 18:05:16

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 ?

Napisany przez: nospor 24.08.2006, 18:09:31

Cytat
ale nie wiem jak to napisac
Nie wiesz jak napisac od poczatku, czy jak wykorzystac moją klase? Jak to drugie to przyklady przeciez podalem winksmiley.jpg

Cytat
ale co z tymi plikami które trzeba zaincludować ? tylko Pager.class.php czy wszystkie ?
Tylko Pager.class.php. Reszta plikow to przyklady jak uzywac

Napisany przez: Lee 24.08.2006, 18:21:49

Trzeci parametr ?

  1. <?php
  2. public function __construct($id, $pageLink = '')
  3. ?>

tutaj nie ma miejsca na 3 parametr :| a nawet jak jest to co mam wpisać jako drugi ? bo przy wywołaniu podane jest (1 post w tym temacie)
  1. <?php
  2. $pager = new Pager('idPagera');
  3. ?>

Napisany przez: AxZx 24.08.2006, 18:24:15

3 parametr metody render

Napisany przez: Lee 24.08.2006, 18:42:07

No to teraz kompletnie nic nie rozumiem sleep.gif

Napisany przez: nospor 24.08.2006, 18:46:09

@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 winksmiley.jpg

Przejrzyj przyklady co są zalączone.

Specjalnie dla Ciebie kod pod Smarty:

  1. <?php
  2. http://www.php.net/session_start();
  3. require_once('Pager.class.php');
  4. $sql = 'select count(*) from TABLE';
  5. $result = http://www.php.net/mysql_query($sql);
  6. $row = http://www.php.net/mysql_fetch_array($result);
  7. $recordsCount = $row[0];//pobranie liczby rekordów
  8. try{
  9. $pager = new Pager('idPagera');
  10. $pager->SetTotalRecords($recordsCount);
  11. $pag = $pager->Render(true);
  12. $start = $pager->GetIndexRecordStart();
  13. $end = $pager->GetIndexRecordEnd();
  14. }
  15. catch (Exception $e) {
  16. http://www.php.net/echo $e->getMessage();
  17. }
  18.  
  19. //zapytanie z uwzglenieniem stronicowania
  20. $sql = 'select * from TABLE limit '.$start.','.($end - $start + 1);
  21. //...pobranie wyników i ich wyswietlenie
  22.  
  23. //tu gdzies tworzysz sobie smarty
  24.  
  25. //przypisanie do smarty
  26. $smarty->assign('pager', $pag);
  27. ?>


kod smarty:
Kod
{$pager}


Oczywiscie rekordy tez mozesz przypisac do smartiego, ale nie musisz winksmiley.jpg

Napisany przez: Lee 24.08.2006, 19:37:17

Nie obraziłem się, bo sam stwierdzam że jestem tępy winksmiley.jpg "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

  1. <?php
  2. require_once('Pager.class.php');
  3. $sql = 'select count(*) from '.$tbl_guestbook.'';
  4. $result = http://www.php.net/mysql_query($sql);
  5. $row = http://www.php.net/mysql_fetch_array($result);
  6. $recordsCount = $row[0];
  7. try{
  8. $pager = new Pager('idPagera');
  9. $pager->SetTotalRecords($recordsCount);
  10. $pag = $pager->Render(true);
  11. $start = $pager->GetIndexRecordStart();
  12. $end = $pager->GetIndexRecordEnd();
  13. }
  14. catch (Exception $e) {
  15. http://www.php.net/echo $e->getMessage();
  16. }
  17.  
  18. $sql = 'select * from '.$tbl_guestbook.' limit '.$start.','.($end - $start + 1);
  19. $query = http://www.php.net/mysql_query($sql);
  20. while ($result = http://www.php.net/mysql_fetch_assoc($query)){
  21. $row[] = $result;
  22. }
  23. $smarty->assign('pager', $pag);
  24. $smarty -> assign('entry', $row);
  25. ?>

a wywołuje go tak
  1. {foreach from=$entry item=entry}
  2. {$entry.title} :: {$entry.author}
  3. {/foreach}
  4. {$pager}

tak wiem tępy jestem winksmiley.jpg

Napisany przez: nospor 24.08.2006, 20:10:24

Cytat
ustawiłem sobie ze ma mi wyswietlać 4 ale to wyświetla mi tak
W kodzie co pokazales nie widze by tak bylo. BRakuje SetRecordsPerPage
  1. <?php
  2. //....
  3. $pager->SetRecordsPerPage(4);
  4. $pag = $pager->Render(true);
  5. //.....
  6. ?>


Pozatym w smarty nadajesz taką samą nazwe dla item co zmienna. nie jestem pewien czy to sie nie gryzie. Daj tak:
Kod
{foreach from=$entry item=row}
{$row.title} :: {$row.author}
{/foreach}
{$pager}


Jakby nadal nie dzialalo, to wal na PW. Szkoda tu topic "zasmiecac" winksmiley.jpg

edit: a juz wiem. robisz $row[] =....
ale wczesniej $row ma pewne dane. Musisz przed petla zresetowac $row:
  1. <?php
  2. //.....
  3. $row = http://www.php.net/array();
  4. while ($result = http://www.php.net/mysql_fetch_assoc($query)){
  5. $row[] = $result;
  6. }
  7. //.....
  8. ?>

Napisany przez: Lee 24.08.2006, 20:15:13

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 smile.gif

Napisany przez: tomick_pl 16.09.2006, 11:39:27

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 smile.gif ). Ja to sobie tak naprawiłem zmieniając kilka linijek metody _toArray:

  1. <?php
  2. if ($this->_indexPageStart > 1) {
  3. $this->_array[self::_GOTO_FIRST_] = 1;
  4. $this->_array[self::_GOTO_PREV_X_] = $this->_actualPage - $this->_pagesPerNav;
  5. }
  6. ?>


na:

  1. <?php
  2. if ($this->_indexPageStart > 1) {
  3. $this->_array[self::_GOTO_FIRST_] = 1;
  4.  #$this->_array[self::_GOTO_PREV_X_] = $this->_actualPage - $this->_pagesPerNav;
  5. }
  6. 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
  7. $this->_array[self::_GOTO_PREV_X_] = $this->_actualPage - $this->_pagesPerNav;
  8. }
  9. ?>


oraz to:

  1. <?php
  2. if ($this->_indexPageEnd < $this->_totalPages) {
  3.  $this->_array[self::_GOTO_NEXT_X_] = $this->_actualPage + $this->_pagesPerNav;
  4.  $this->_array[self::_GOTO_LAST_] = $this->_totalPages;
  5. }
  6. ?>


na:

  1. <?php
  2. if ($this->_indexPageEnd < $this->_totalPages) {
  3.  #$this->_array[self::_GOTO_NEXT_X_] = $this->_actualPage + $this->_pagesPerNav;
  4.  $this->_array[self::_GOTO_LAST_] = $this->_totalPages;
  5. }
  6.  
  7. if ($this->_indexPageEnd+($this->_pagesPerNav/2) <= $this->_totalPages) {
  8.  $this->_array[self::_GOTO_NEXT_X_] = $this->_actualPage + $this->_pagesPerNav;
  9. }
  10. ?>


No chyba, że jednak klasa działa normalnie w innych warunkach - to przepraszam w takim razie smile.gif

EDIT:
Poprawiłem ostatni kod w tym poście- nie działał tak, jak chciałem

Napisany przez: AxZx 16.09.2006, 11:43:06

tez to zauwazylem, ale gdy przeskoczysz na 27 ktorej nie ma to i tak wyswietli sie ostatnia strona 25.

Napisany przez: tomick_pl 16.09.2006, 12:03:02

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 smile.gif Poza tym raczej taki zabieg nie wpłynie na szybkość skryptu- a i ładniej wygląda smile.gif Ale tak to klasa ok smile.gif

Napisany przez: nospor 17.09.2006, 20:16:28

Dzieki za wykrycie buga smile.gif
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 smile.gif

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.

Napisany przez: tomkoz11 18.11.2006, 09:54:21

Świetna klasa nospor! Wielkie dzięki - działa o wiele szybciej od mojego dotychczasowego sposobu stronnicowania. smile.gif
Pozdrawiam

Napisany przez: czerwony2 29.12.2006, 13:31:41

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ąć??

  1. <?php
  2. $pager = new Pager('idPagera', 'co tutaj?questionmark.gif?', '$ile');
  3. ?>



Mój problem polega na tym że po przekazaniu do klasy liczby rekordów na stronie jaką ma wyświetlać za pomocą:

  1. <?php
  2. $pager->SetRecordsPerPage($ile);
  3. ?>


(gdzie $ile to liczba rekordów na stronie pobrana z formularz)

jest wszytko ok alo po naciśnięciu np. linka wygenerowanego przez pagera do np.drugiej strony wszystko się sypie. sad.gif Rozumiem że trzeba utrzymać liczbę zmiennej $ile np. wysłać ją w linku metodą get a do tego trzeba właściwie skonstruować konstruktora tak?

Jak to powinno wygadać??


Motam się z tym pagerem od paru dni i już się gubię w tym wszystkim (dodam jeszcze ze jestem początkujący).

Napisany przez: nospor 29.12.2006, 13:45:10

Widze ze korzystasz ze starej wersji, 1.0, bo w wyzszych juz konstruktor nie ma 3 parametrow smile.gif

Cytat
a co mam w takim razie wpisać w drugim, bo przecież nie można go ominąć??
wartosc domyslna, czyli ''. a najlepiej przejdz na wersje nr 2 i przejrzyj dołączone do niej przyklady.

pozatym:
  1. <?php
  2. $pager = new Pager('idPagera', '', '$ile');
  3. ?>
tak sie nie wstawia zmiennych '$ile', powiino byc:
  1. <?php
  2. $pager = new Pager('idPagera', '', $ile);
  3. ?>

i czemu u ciebie nazwa forma jest zmienna?

Cytat
dodam jeszcze ze jestem początkujący
Tego nie musiales dodawac winksmiley.jpg

Napisany przez: czerwony2 30.12.2006, 03:34:21

OK trochę posiedziałem, ale udało mi się zrobić to co chciałem - uczymy się na błędach winksmiley.jpg

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

Napisany przez: nospor 2.01.2007, 09:00:46

Cytat
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)
A faktycznie. Dzieki za cynk smile.gif

Napisany przez: emi23o9 22.01.2007, 17:29:35

Witam!
Mam pewien problemik. sad.gif 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

Napisany przez: AxZx 22.01.2007, 17:33:02

napisz co masz w linii 38 pliku pager.class.php

Napisany przez: emi23o9 22.01.2007, 17:35:16

const _GOTO_FIRST_ = 'gtf';

praktycznie jest to sam poczatek klasy

Napisany przez: nospor 22.01.2007, 18:35:43

jak na moj gust to ty uzywasz klasy napisanej dla php5 pod php4 smile.gif
albo zmien wersje php którego uzywasz, albo weź wersję klasy dla php4

Napisany przez: emi23o9 22.01.2007, 19:18:03

ajjjj.... sorka, moj blad.... worriedsmiley.gif wstyd i hanba, przepraszam... worriedsmiley.gif

Napisany przez: primo 24.02.2007, 23:40:22

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ę.

Napisany przez: nospor 26.02.2007, 09:11:00

musisz wywolac konstruktor z drugim parametrem, u ciebie to by bylo mniej wiecej tak:

  1. <?php
  2. $pager = new Pager('idPagera', 'index.php?op=2');
  3. ?>

a kod klasy pozostaw stary.

Napisany przez: Maksymus007 11.03.2007, 10:12:53

a ja chyba znalazłem błąd, a może i nie

  1. <?php
  2. $pager->SetTotalRecords($gal->getGalleriesCount());
  3. $pager->SetRecordsPerPage(1);
  4.  
  5. $pager_rend = $pager->Render();
  6.  
  7. http://www.php.net/echo $page = $pager->GetActualPage();
  8. ?>

powodowało wyrzucenie wyjątku o konieczności wywołania GetActualPage() przed Render(), co działało, ale zawsze zwracało 0;
natomiast po zmianie kodu metody GetActualPage() na
  1. <?php
  2. public function GetActualPage() {
  3. //if (!is_null($this->_indexRecordStart))
  4. // throw new Exception(sprintf($this->_errorMsg['call_set'], 'GetActualPage'));
  5. return $this->_actualPage;
  6. }
  7. ?>

działa bardzo ładnie i zwraca poprawny numer strony smile.gif

Napisany przez: nospor 11.03.2007, 11:40:56

hehe, faktycznie, tak to jest jak sie robi ctrl+c, ctrl+v winksmiley.jpg
To co wykomentowales powinno wygladac tak:

  1. <?php
  2. if (http://www.php.net/is_null($this->_indexRecordStart))
  3. throw new Exception(http://www.php.net/sprintf($this->_errorMsg['call_get'],'GetActualPage'));
  4. ?>

Jutro to poprawie i wrzuce na serwer. thx smile.gif

edit: poprawki naniesione w ostatniej wersji ( 2.02 )

Napisany przez: Maksymus007 10.04.2007, 21:50:47

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 smile.gif

Napisany przez: nospor 11.04.2007, 07:59:39

Cytat
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ł.

Przeciez Pager ma taką mozliwosc i pare postow wyzej byla o tym mowa...

W Twoim przypadku nalezy tak wywolac konstruktor:
  1. <?php
  2. $pager = new Pager('idPagera', 'index.php?a=b&c=2');
  3. ?>

I juz.
Czasami dobrze jest przeczytac to, oco inni pytali, a jak sie nie znajdzie tego co sie szuka, to samemu zapytac smile.gif

Napisany przez: Maksymus007 11.04.2007, 13:39:45

smile.gif To wiem, ale nie o to mi chodzilo smile.gif 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 smile.gif

Napisany przez: nospor 11.04.2007, 13:49:43

No faktycznie ciut inaczej. Tak czy siak w "normalnych" (bez obrazy winksmiley.jpg ) skryptach to ludek (czyli ty) powinien wiedziec jakie ma parametry i zapodac sam wlasciwy link.

No ale kazdy robi jak lubi smile.gif

Napisany przez: microh 5.05.2007, 13:28:52

Mam pytanko odnośnie funkcji createLink

  1. <?php
  2. function _createLink($title, $page, $text) {
  3. return '<a title="'.$title.'" href="'.
  4. ($this->_userWholeLink ? http://www.php.net/str_replace('#PAGE#', $page, $this->_linkPage) : ($this->_linkPage.$this->_linkSep.$this->_paramPageNumber.'='.$page)).'">'
  5. .$text.'</a>';
  6. }
  7. ?>


Otóż muszę do linku dodac jeszcze
  1. <?php
  2. &cat=" . $_GET['cat'] . "
  3. ?>

Jak tego dokonac?

Napisany przez: my salsa 5.05.2007, 13:52:51

eh czytaj dwa posty wyżej, post nospor`a

Napisany przez: agnieszka87 12.05.2007, 20:50:22

Prośba do ludzi dobrej woli sadsmiley02.gif

Przeróbcie mi poniższy kodzik na ten z pagerem.
On jest dla mnie zbyt pogmatwany, zebym umiala go tak zrobic.

PLSSS....

  1. <?php
  2. menu('Ostatnio dodane');
  3.  
  4. if(http://www.php.net/isset($_GET['typ'])) {
  5. $typ = '`typ` = ' . (int) $_GET['typ'];
  6. }else{
  7. $typ = "((`typ` >= 1 and `typ` <= 4) or (typ = '15') or (typ = '16') or (typ = '17'))";
  8. }
  9.  
  10. //$typ = (isset($_GET['typ']) ? '`typ` = ' . (int) $_GET['typ'] : '((`typ` >= 1 and `typ` <= 4) or (typ = '15'))');
  11. $cat = (http://www.php.net/isset($_GET['cat']) ? ' and `category` = ' . (int) $_GET['cat'] : '');
  12. $order = '';
  13. if ($_GET['top'] == 1)
  14. {
  15. $order = ' order by `ocena` desc';
  16. }
  17. elseif ($_GET['last'] == 1)
  18. {
  19. $order = ' order by `added` desc';
  20. }
  21.  
  22. $res = http://www.php.net/mysql_query('select * from `stuff` where ' . $typ . $cat);
  23. // ilosć trafień
  24. $hits = http://www.php.net/mysql_num_rows($res);
  25.  
  26. $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));
  27.  
  28. if ($hits == 0)
  29. {
  30. http://www.php.net/echo 'Nie ma żadnych rekordów w tej kategorii.';
  31. }
  32. else
  33. {
  34. while ($row = http://www.php.net/mysql_fetch_assoc($res))
  35.  
  36. {
  37. if($row['added']>0)
  38. $date = http://www.php.net/sprintf('<img src="ikonki/dodano.jpg">Dodano: %s <br />', http://www.php.net/date('Y.m.d', $row['added']));
  39. else
  40. $date = (string) '';
  41. $comments_count = (int) 0;
  42. $query = http://www.php.net/sprintf("SELECT COUNT(*) AS CommentsCount FROM komentarze WHERE stuff='%d'", $row['id']);
  43. $comments = http://www.php.net/mysql_query($query);
  44. if($comments) {
  45. $record = http://www.php.net/mysql_fetch_assoc($comments);
  46. $comments_count = $record['CommentsCount'];
  47. http://www.php.net/mysql_free_result($comments);
  48. }
  49. if($row['miniaturka']!='') { 
  50. $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']);
  51. } else {
  52. $image = '';
  53. }
  54. if(http://www.php.net/isset($categories[$row['category']]))
  55. $cat = http://www.php.net/sprintf("%s: ", $categories[$row['category']]);
  56. else
  57. $cat = (string) '';
  58. 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>',
  59. $image,
  60. $cat, $row['id'], $row['tytul'],
  61. $date,
  62.  
  63.  
  64.  
  65.  
  66. $row['ocena'], $row['counter'],
  67. $comments_count, $row['login']);
  68. }
  69. }
  70.  
  71. http://www.php.net/echo '<div style="text-align: center">';
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78. /********* NUMEROWANIE *********/
  79.  
  80. $temp = http://www.php.net/min((int) $_GET['currentpage'] + 5, http://www.php.net/ceil((float) $hits / 9.0));
  81. http://www.php.net/echo '<center><table><tr><td>';
  82. if ($_GET['currentpage'] > 0) http://www.php.net/print("<a href="index.php?page=list&currentpage=" . ($_GET['currentpage'] - 1) . "&cat=" . $_GET['cat'] . ""><img style="float:right;" src="gfx/poprzednia.jpg" border="0"></a></td>");
  83. for ($i = http://www.php.net/max((int) $_GET['currentpage'] - 4, 0); $i < $temp; $i++)
  84. { http://www.php.net/echo '<td>';
  85.  http://www.php.net/print("<a href="index.php?page=list&currentpage=" . $i . "&cat=" . $_GET['cat'] . "">[" . ($i+1) . "]</a> ");
  86.  http://www.php.net/echo '</td>';
  87.  if($i == ($temp - 1)) {
  88.  http://www.php.net/echo '<td style="width:80">';
  89. http://www.php.net/print("<a href="index.php?page=list&currentpage=" . ($_GET['currentpage'] + 1) . "&cat=" . $_GET['cat'] . ""><img style="float:right;" src="gfx/dalej.jpg" border="0"></a>");
  90.  http://www.php.net/echo '</td></tr>';
  91.  }
  92.  
  93. }
  94. $strona = $_GET['currentpage'] + 1;
  95.  http://www.php.net/echo '</table></center>';
  96.  if (!http://www.php.net/isset($_GET['currentpage'])) http://www.php.net/echo 'Jestes na stronie<b> 1</b>';
  97.  else http://www.php.net/echo 'Jestes na stronie <b>'.$strona.'</b>';
  98. /*******************************/
  99.  
  100. http://www.php.net/echo '</div></div>';
  101. http://www.php.net/echo "$div";
  102.  include ("test.php");
  103. ?>


Dziękuję za pmoc ohmy.gif worriedsmiley.gif

Pomoże ktoś questionmark.gif offtopic.gif

Napisany przez: microh 19.05.2007, 10:09:35

A ja mam jakiś dziwny problem.
Konstruktor wywołałem tak:

  1. <?php
  2. if (http://www.php.net/isset($_GET['cat'])) $pager = new Pager('str','?page=list&cat='.$_GET['cat'].'');
  3. else $pager = new Pager('str');
  4. ?>


Wszystko ładnie pięknie, ale gdy zapodam link; http://skifa.pl/index.php?page=list&cat=0
to nie dość, że nie wyswietlaja sie linki "10 stron do przodu" i "Ostatnia strona". To jeszcze pager startuje czasem od 3 strony.

Błąd pagera?

// Mam najnowszaą wersję pod PHP5.

Napisany przez: Balon 19.05.2007, 10:30:31

Cytat
o jeszcze pager startuje czasem od 3 strony.

Hm, a może dlatego, że pager zapisuje ostatnio odwiedzoną podstronę w sesji ? tongue.gif Można to wyłączyć oczywiście.

Osobiście wczoraj skorzystałem z tej klasy i jestem super zadowolony !

Napisany przez: nospor 21.05.2007, 09:52:28

Cytat
To jeszcze pager startuje czasem od 3 strony.
Tak jak napisał Balon. Strona jest zapamietywana w sesji, i jeśli nie określisz jawnie strony to pójdzie z sesji jesli byla jakas. Oczywiscie mozna tym sterowac.

Cytat
to nie dość, że nie wyswietlaja sie linki "10 stron do przodu" i "Ostatnia strona"
Hmmm, przyjrzę się temu po weekendzie, bo teraz nie mam dostępu do kodów.

edit:
tak jak przypuszczalem, twoj dodatkowy adres nie ma wplywu na "niepojawianie" sie linkow. Wszystko jest generowane na podstawie zapodawanych danych w postaci liczby rekordow i twoj adres nie ma tu nic do tego. Byc moze ty, źle wyliczasz liczbę rekordów i wychodzi, ze stron jest mniej akurat przy tym adresie i dlatego nie dostajesz ostatnich linkow

Napisany przez: Guli 24.05.2007, 11:40:18

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.

  1. <http://december.com/html/4/element/div.html class="kolor">
  2. <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>
  3. <http://december.com/html/4/element/h2.html>Obrazek 1</http://december.com/html/4/element/h2.html>
  4. <http://december.com/html/4/element/ul.html>
  5. <http://december.com/html/4/element/li.html>Opis obrazka</http://december.com/html/4/element/li.html>
  6. </http://december.com/html/4/element/ul.html>
  7. </http://december.com/html/4/element/div.html>
  8.  
  9. <http://december.com/html/4/element/div.html class="kolor">
  10. <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>
  11. <http://december.com/html/4/element/h2.html>Obrazek 2</http://december.com/html/4/element/h2.html>
  12. <http://december.com/html/4/element/ul.html>
  13. <http://december.com/html/4/element/li.html>Opis obrazka</http://december.com/html/4/element/li.html>
  14. </http://december.com/html/4/element/ul.html>
  15. </http://december.com/html/4/element/div.html>

I takich jest 10 i chce podzielić na dwie cześci aby wyswietlało po 5 na dwóch stronach. Nie ma tam bazy mysql ani plików tekstowych. Jak dałem poniższy kod to niby wyswietla < 1 2 3 > ale po kliknięciu na stronę 2 nie dzieli w ogólę stronę i na każdej jest nadal 10 obrazków. Jak użyć tę klase ?
  1. <?php
  2. http://www.php.net/session_start();
  3. require_once('Pager.class.php', 'index.php?id=strona');
  4.  
  5.  $pager = new Pager('idPagera');
  6.  $pager->SetTotalRecords(10);
  7.  http://www.php.net/echo $pager->Render();
  8. ?>


Jak zastosować ten kod. Proszę o wskazówki.

Napisany przez: Balon 24.05.2007, 11:48:37

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 winksmiley.jpg

Napisany przez: nospor 26.07.2007, 11:49:36

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 smile.gif

edit: cos mi sie net zmulil i Balon mnie wyprzedzil smile.gif

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

Cytat
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ł.
Juz jest smile.gif

Napisany przez: acztery 14.08.2007, 19:28:51

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

Napisany przez: nospor 20.08.2007, 17:27:20

Cytat
Ilość wszystkich rekordów
hmmm, bylo tak? Juz nawet nie pamietam pierwszej wersji smile.gif
Ale to przeciez nie problem. Klasa zwraca ci tablicę pagera. Na podstawie tej tablicy możesz zrobic swoja wlasny wygląd taki jak chcesz.
Mozesz oddziedziczyc po klasie i nadpisac metodę toString() by osiągnąć to co chcesz. Do wyboru do koloru smile.gif

Napisany przez: acztery 20.08.2007, 20:27:36

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:

  1. <?php
  2. $classDoc = new Doc();
  3. $classDoc->_where = $_GET['FOR'];
  4. $classDoc->_lang = Lang::getSesLang("SES");
  5. $classDoc->_str = $_POST['q']; // slowo z wyszukiwarki
  6. $classDoc->_order = "time DESC";
  7. $smarty->assign('cDoc2',$classDoc->likeCountDoc());
  8.  
  9. $pager = new Pager("list_doc");
  10. $pager->SetTotalRecords($classDoc->likeCountDoc());
  11. $pager->Make(true); 
  12. $renderPager = $pager->Render(); 
  13. $start = $pager->GetIndexRecordStart();
  14. $end = $pager->GetIndexRecordEnd();
  15. $smarty->assign('renderPager',$renderPager);
  16. $endes = $end - $start + 1;
  17.  
  18. $classDoc->_f = $start;
  19. $classDoc->_t = $endes;
  20.  
  21. $smarty->assign('RESULT',$classDoc->likeDocuments());
  22. ?>


ale cos nie nie tak po przejscu dalej zmienna z posta znika :/ a powinna byc widoczna nawet po przejscu na inna podstronę pagera. Musze szukane słowo przekazywać np w GET czy klasa to obsługuje?

Napisany przez: nospor 21.08.2007, 07:16:11

Cytat
ale cos nie nie tak po przejscu dalej zmienna z posta znika
No tak. zmienne z posta znikają. Normalne przecież smile.gif POST jest widoczny tylko dla wyslanego formularza w danym żądaniu.
Jesli leci POST to musisz zapamietac go np. w sesji. Później jesli nie bylo posta to pobierasz go z sesji i juz smile.gif

Albo możesz formularz wysylac getem a nie postem. Klasa daje mozliwosc generowania linkow z uwzględnieniem parametrow w get.

edit:
tu to opisalem
http://nospor.pl/formularz-i-stronicowanie-pamietanie-stanu-n26.html

Napisany przez: become 23.12.2007, 01:48:57

czy przy pomocy tej klasy ustawie stronicowanie takie jak na wykop.pl i czy mogę ingerować w wygląd ?

Napisany przez: Cysiaczek 23.12.2007, 02:20:07

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.

Napisany przez: kallosz 23.12.2007, 12:23:58

Witam

Jest może możliwośc załączenia klasy pager do innej klasy ?

Pozdrawiam

Napisany przez: nospor 24.12.2007, 15:53:58

Cytat
czy przy pomocy tej klasy ustawie stronicowanie takie jak na wykop.pl i czy mogę ingerować w wygląd ?

Mozesz. ALbo przekazujesz funkcje, ktora generuje wyglad, albo nadpisujesz klase, albo pobierasz tablice pagera i na jej podstawie generujesz wyglad. Przyklady w paczce.

Cytat
Jest może możliwośc załączenia klasy pager do innej klasy ?
Klasa jak klasa, robisz z nią co chcesz i gdzie chcesz. Moze sprecyzuj pytanie, jesli ta odpowiedź cie nie zadowala

Napisany przez: radziowi 26.12.2007, 13:36:33

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??

  1. <?php
  2. &#271;ťż
  3. ?>


Mam to połączone ze Smartami W kodzie tego tekstu nie mam na pewno .

Mam kod w pliku pager.php wszytko jest ok. Jesli zmienia nazwe pliku np import.php to wywala ten blad

Czy nazwy plikow maja cos do tej klasy??

Napisany przez: become 29.12.2007, 17:33:13

Cytat(Cysiaczek @ 23.12.2007, 02:20:07 ) *
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.


No jakoś mi się nie udało.
Jak zrobić aby wyswietlila sie zawsze na pasku nawigacyjnym 1-y i ostatni numer strony a pomiedzy zakresami pojawialy sie kropki

np. tak:

1 ... 10 11 12 13 14 15 ... 123

Napisany przez: Cysiaczek 29.12.2007, 17:52:37

Akurat jakiś czas temu przerobiłem metodę tej klasy:

  1. <?php
  2. protected function toString() {
  3. //print_pre($this->array);
  4. if ($this->totalRecords <= $this->RecordsPerPage)
  5. return '';
  6. $_str = '';
  7. $sep = ' ';
  8.  
  9.  
  10. //if (isset($this->array[self::GOTO_PREV_X]))
  11. //$_str .= $this->createHTMLLink($this->array[self::PAGES_PER_NAV].' stron(y) do tyłu', $this->array[self::GOTO_PREV_X][self::LINK], '<<').$sep;
  12. if (http://www.php.net/isset($this->array[self::GOTO_PREV]))
  13. $_str .= $this->createHTMLLink('Poprzednia strona', $this->array[self::GOTO_PREV][self::http://www.php.net/link], 'poprzednia').$sep;
  14.  
  15. if (http://www.php.net/isset($this->array[self::GOTO_FIRST]))
  16. $_str .= $this->createHTMLLink('Pierwsza strona', $this->array[self::GOTO_FIRST][self::http://www.php.net/link], $this->array[self::GOTO_FIRST][self::PAGE]).' ...'.$sep;
  17.  
  18. foreach ($this->array[self::PAGES] as $_page => $_pageLink){
  19. if (!$_pageLink)
  20. $_str .= '<span><b>'.$_page.'</b></span>';
  21. else
  22. $_str .= $this->createHTMLLink("Strona ".$_page, $_pageLink, $_page);
  23. $_str .= $sep;
  24. }
  25.  
  26. if (http://www.php.net/isset($this->array[self::GOTO_LAST]))
  27. $_str .= $this->createHTMLLink('Ostatnia strona', $this->array[self::GOTO_LAST][self::http://www.php.net/link], '... '.$this->array[self::GOTO_LAST][self::PAGE]);
  28.  
  29. if (http://www.php.net/isset($this->array[self::GOTO_NEXT]))
  30. $_str .= $sep.$this->createHTMLLink('Następna strona', $this->array[self::GOTO_NEXT][self::http://www.php.net/link], 'następna');
  31. //if (isset($this->array[self::GOTO_NEXT_X]))
  32. //$_str .= $sep.$this->createHTMLLink($this->array[self::PAGES_PER_NAV].' stron(y) do przodu', $this->array[self::GOTO_NEXT_X][self::LINK], '>>');
  33.  
  34.  
  35. return $_str;
  36. }
  37. ?>


W każdym razie jest z kropkami ;p

Napisany przez: nospor 30.12.2007, 12:30:30

Cytat
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??
hmmm, czyzby BOM? Takie krzaczki co dodaje plik w kodowaniu UTF8? U mnie tego nie ma bo pisalem to normalnym edytorem, ale moze ty robiles jakiegos "Zapisz" na mojej klasie i ci sie BOM dopisal?

Napisany przez: pawel.s 27.01.2008, 22:03:15

witajcie mam problem nie chce wyswietlic mi sie pager
mam cos takiego

  1. <?php
  2. $sql = 'select count(*) from notice';
  3. $result = http://www.php.net/mysql_query($sql);
  4. $row = http://www.php.net/mysql_fetch_array($result);
  5. $recordsCount = $row[0];//pobranie liczby rekordów  
  6. $pager = new Pager('p');  
  7. $pager->SetTotalRecords(3);//ustawienie liczby rekordów  //wygenerowanie pagera i zapamietanie go w zmiennej w celu  //pozniejszego wyswietlenia  
  8. $renderPager = $pager->Render();  
  9. $start = $pager->GetIndexRecordStart();//pobranie indexu rekordu początkowego  
  10. $end = $pager->GetIndexRecordEnd();//pobranie indexu rekordu koncowego  //zapytanie z uwzglenieniem stronicowania  
  11. $sql = 'select SQL_CALC_FOUND_ROWS * from notice limit '.$start.','.($end - $start + 1);  //...pobranie wyników i ich wyswietlenie  
  12. $result = http://www.php.net/mysql_query($sql);
  13. $row = http://www.php.net/array();
  14. while ($row = http://www.php.net/mysql_fetch_assoc($result)){
  15.  $res[] = $row;
  16. }
  17. $res = $res
  18. ?>


potem
  1. <?php
  2. smarty->assign('pager',$renderPager);
  3. ?>

i w tmplejcie

  1. <http://december.com/html/4/element/div.html id="p">{$peger}</http://december.com/html/4/element/div.html>

czy dobrze robie questionmark.gif

Napisany przez: vokiel 28.01.2008, 09:24:06

może przez literówkę w template: e => a

  1. <http://december.com/html/4/element/div.html id="p">{$pager}</http://december.com/html/4/element/div.html>

Napisany przez: pawel.s 28.01.2008, 14:29:27

nie to nie przez to wogole jak zrobie vardump z $pagera to jest pusty

Napisany przez: nospor 28.01.2008, 14:39:05

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

Napisany przez: pawel.s 28.01.2008, 16:17:24

wersja 2.0 dla php5 takiej uzywam co jest nie tak questionmark.gif

Napisany przez: nospor 28.01.2008, 20:32:18

  1. <?php
  2. $pager->SetTotalRecords(3)
  3. ?>

Czemu ustawiasz licze rekordow na 3? Przeciez wczesniej wyliczasz $recordsCount, ktore jest prawdziwą liczbą rekordow i tą tę zmienną powinienes ustawic jako liczbę rekordow. Teraz ustawiasz 3. A jesli liczba rekordow jest mniejsza od liczby rekordow na stronie, to pager nic nie generuje bo nie ma sensu generowac jedną strone.

Napisany przez: pawel.s 29.01.2008, 18:27:05

hej, oki wyswietlil mi sie poprawnie pager
dalem mu

  1. <?php
  2. $pager->SetRecordsPerPage(3);
  3. ?>

mam aktualnie 11 rekordow, jak klikam w pager na aby mi sie wyswietlily kolejne 3 rekordy to xxx.php?pp_p=2 co dalej robic... questionmark.gif

Napisany przez: nospor 29.01.2008, 21:17:19

Cytat
co dalej robic...
odpowiem ci jak maszyna: zapytaj inaczej lub specyzuj problem bo ni w ząb nie kumam oco ci chodzi.
Co dalej robic? idź na cole czy coś, pager zrobi za ciebie wszystko na co go stac. winksmiley.jpg

Napisany przez: pawel.s 29.01.2008, 21:40:17

jak chce wyswitlic kolejne 3 rekordy to pojawia mi sie xxx.php?pp_p=2 nie wiem co mam zrobic aby pager dzialal...

Napisany przez: nospor 29.01.2008, 21:55:17

normalnie masz jakies kosmiczne problemy.
Pokaza caly kod jaki masz.
pokaz rowniez kod html jaki ma w sobie Twoj $renderPager

Napisany przez: pawel.s 30.01.2008, 17:15:33

oto moj kod :

  1. <?php
  2. switch($do){
  3. case 'show_notice':
  4.  
  5. $db = http://www.php.net/mysql_connect('localhost','root',xxxxx');
  6. mysql_select_db('xxxx',$db);
  7.  
  8. $sql = 'select http://www.php.net/count(*) from notice';
  9. $result = mysql_query($sql);
  10. $row = mysql_fetch_array($result);
  11. $recordsCount = $row[0];  
  12. $pager = new Pager('p');  
  13. $pager->SetTotalRecords($recordsCount);
  14. $pager->SetRecordsPerPage(3);
  15. $renderPager = $pager->Render();  
  16. $start = $pager->GetIndexRecordStart();  
  17. $end = $pager->GetIndexRecordEnd();  
  18. $sql = 'select * from notice limit '.$start.','.($end - $start + 1);  
  19. $result = mysql_query($sql);
  20.  
  21.  
  22. $row = array();
  23. while ($row = mysql_fetch_assoc($result)){
  24. $res[] = $row;
  25. }
  26. $res = $res;
  27. $smarty->assign('pager,$renderPager);
  28. break;
  29. }
  30. ?>


  1. <http://december.com/html/4/element/div.html id="p">{$pager}</http://december.com/html/4/element/div.html>


tak jak pisalem wysiwtlaja mi sie 3 rekordy z bazy danych nastepnie poprawnie pager
1 http://localhost/piana/_admin/show.php?pp_p=2 http://localhost/piana/_admin/show.php?pp_p=3 http://localhost/piana/_admin/show.php?pp_p=4 http://localhost/piana/_admin/show.php?pp_p=2
jak klikne w pager 2 to chce mnie przekierowac na show.php?pp_p=2 i pojawi sie Notice: Undefined variable: do in ....

Napisany przez: nospor 30.01.2008, 19:15:47

Cytat
Notice: Undefined variable: do in ....
A widzisz... brakuje ci $do, wzgledem ktorej robisz switch i pager. Zakladam ze pierwotnie $do masz w url a pager generuje ci linki bez tego $do. Pisalem juz w tym temacie jak zrobic by generowalo linki takie jak chcesz. Poszukaj.

A gdybyś skorzystal z wersji 2.5 to moglbys ustawic by sam automatycznie budowal linki z parametrami co byly w url

Napisany przez: pawel.s 30.01.2008, 20:24:39

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 questionmark.gif

dobra poradzilem sobie dziala dzieki wielkie i pozdrawiam...

Napisany przez: Legro 22.04.2008, 18:20:59

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:

Kod
cos.php?kategoria=3&pp=3


(gdzie kategoria=3 to id mojej kategorii, a pp=3 to numer strony)


..........EDIT
przepraszam bardzo.. ;( juz sobie poradziłem winksmiley.jpg

wystarczyło zrobić tak:

Kod
$pager = new Pager ($_GET['id'], 'cos.php?kategoria='.$_GET['id']);

Napisany przez: aasat 4.10.2008, 19:49:13

Super robota, świetna klasa, podziękowania dla autora

A teraz pytanie smile.gif
Czy jest jakiś sposób na niceurl? bo widze w TODO, ze cos ma byc z tym pomyślane

Napisany przez: nospor 6.10.2008, 10:02:12

Cytat
Czy jest jakiś sposób na niceurl? bo widze w TODO, ze cos ma byc z tym pomyślane

Sek w tym, ze kazdy moze miec swoj wlasny niceUrl i sam z automata nie jestem w stanie go budowac.

W klasie Pager.class.php masz metode makeLink() (w niej masz te TODO). Funkcja ta jest wywolywana, gdy drugi parametr konstruktora jest ustawiony na null. W metodzie tej musisz dac generowanie swojego ladnego urla. Ja tak robie u siebie w projekcie.

Napisany przez: piraciq 17.10.2008, 09:24:31

Witam

ja zapodałem tą klasę do joomli i spisuje się znakomicie :]


Pozdrawiam

Napisany przez: aasat 16.12.2008, 23:42:41

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

Napisany przez: szumigt 19.02.2009, 17:51:35

Witam. Właśnie próbuję zastosować kod Pager-a na stronie. Wykonałem na razie taki kod

CODE

$pager = new Pager('p','product_list.php?group='.$_GET['group']);

$pager->SetTotalRecords(1587);
$pager->SetRecordsPerPage(6);

$pager->Make(true);

$start = $pager->GetIndexRecordStart();
$end = $pager->GetIndexRecordEnd();
$str->smarty -> assign('pager',$pager->Render());

function getClothes($kat,$start,$end) {

$sql='SELECT id as id_produktu, nazwa,symbol FROM produkty WHERE gr='.$kat.' LIMIT '.$start.','.($end - $start + 1);

return $db->getArray($sql); // AdoDB

}


Kod ma jeszcze małą niedogodność w postaci stałej liczby rekordów a w projekcie jest ona zmienna bo liczba artykułów z danej kategorii jest inna za każdym wygwenerowaniem strony. To jestem w stanie obejść bo wiem że trzeba wykonać zapytanie do BD o oblicznie ilości art z kategorii. Problem pozostaje jednak przy zmianie kategori i braku ustawionej zmiennej $_GET['ppp']. Wtedy przy przełączniu na inna kategorię numer strony pozostaje na tej samej wartości ... Nie wiem czy wyjaśniłem to dokładnie ... krótko mówiąc chodzi o to że przy przełączniu na inną stronę na której nie ma ustawionej zmiennej ppp numer strony pozstaje z poprzedniej. :-)

Co tutaj trza poprawić w tym kodzie ... pomożecie questionmark.gif

Napisany przez: nospor 19.02.2009, 21:35:03

Cytat
Kod ma jeszcze małą niedogodność w postaci stałej liczby rekordów a w projekcie jest ona zmienna bo liczba artykułów z danej kategorii jest inna za każdym wygwenerowaniem strony. To jestem w stanie obejść bo wiem że trzeba wykonać zapytanie do BD o oblicznie ilości art z kategorii
No tak, liczbe rekordow musisz wyliczac, podawalem to w przykladach

Cytat
Problem pozostaje jednak przy zmianie kategori i braku ustawionej zmiennej $_GET['ppp']. Wtedy przy przełączniu na inna kategorię numer strony pozostaje na tej samej wartości ...
Za bardzo nie wiem oco ci chodzi.

Napisany przez: szumigt 20.02.2009, 15:29:04

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.

Napisany przez: nospor 20.02.2009, 19:23:34

Cytat
Chociaż nie wiem czemu klasa Pager nie ustawia sama w momencie kiedy nie jest zdefinowana zmienna ppp to przyjmuje stronę nr1

Jak nie jest zdefiniowana to ustawia sama na 1, chyba ze juz chodziles po pagera, to wowczas pamieta stan pagera w sesji i z tego korzysta.
Jakbys dla kazdej kategorii nadawal oddzielne id dla pagera, to kazda kategoria by miala swoje wlasne pamietanie, a nie tak ja teraz korzystają z tego samego smile.gif

Napisany przez: nieraczek 27.02.2009, 17:57:12

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. tongue.gif Czy jesli zakomentuję session_start() to narażam się na jakieś problemy ? biggrin.gif

  1. <?php
  2. //session_start();
  3. require_once('pager/Pager.class.php');
  4. $sql = 'select count(*) from wiadomosci';
  5. $result = http://www.php.net/mysql_query($sql);
  6. $row = http://www.php.net/mysql_fetch_array($result);
  7. $recordsCount = $row[0];//pobranie liczby rekordów
  8. try{
  9.    $pager = new Pager('idPagera');
  10.    $pager->SetTotalRecords($recordsCount);
  11.    $pager->Make(true);
  12.    $pag = $pager->Render();
  13.    $start = $pager->GetIndexRecordStart();
  14.    $end = $pager->GetIndexRecordEnd();
  15. }
  16. catch (Exception $e) {
  17.    http://www.php.net/echo $e->getMessage();
  18. }
  19.  
  20. //zapytanie z uwzglenieniem stronicowania
  21. $sql = 'select * from wiadomosci limit '.$start.','.($end - $start + 1);
  22. //...pobranie wyników i ich wyswietlenie
  23.    $result = http://www.php.net/mysql_query($sql) or http://www.php.net/die('blad zapytania1');
  24.  
  25.  
  26.    while($val = http://www.php.net/mysql_fetch_array($result))
  27.    {
  28.        $wiadomosc = $val['tresc'];
  29.        http://www.php.net/echo "$wiadomosc<br/><br/><br/>";
  30.    }
  31.    
  32. http://www.php.net/echo $pag;//wyswietlenie pager'a
  33.  
  34. ?>


I jeszcze gdzie i co w Pager.class.php dopisać: "Strona AKTUALNA_STRONA z LICZBA_STRON' questionmark.gif

I jeszcze mała sugestia odnośnie Twojej klasy - dodaj pogrubienie <strong> </strong> do aktualnego numeru wyświetlanej strony w klasie Pager.class.php to znaczy:
  1. <?php
  2. $_str .= '<span><strong>'.$_page.'</strong></span>';
  3. ?>


Bo bez tego nie idzie się połapać na jakiej jest sie stronie tongue.gif

Napisany przez: nospor 27.02.2009, 19:40:49

Cytat
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.


  1. <?php
  2. //....
  3. $pager = new Pager('idPagera');
  4. $pager->SetUseSession(false);
  5. //.....
  6. ?>

Cytat
I jeszcze gdzie i co w Pager.class.php dopisać: "Strona AKTUALNA_STRONA z LICZBA_STRON'

  1. <?php
  2. //...
  3. http://www.php.net/echo 'Strona '.$pager->GetActualPage().' z '.$pager->GetTotalPages();
  4. http://www.php.net/echo $pag;//wyswietlenie pager'a
  5. //...
  6. ?>

Napisany przez: nieraczek 27.02.2009, 22:21:27

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ę. smile.gif

plik ze stronicowaniem:

  1. <?php
  2. require_once('pager/Pager.class.php');
  3. $sql = 'select count(*) from wiadomosci';
  4. $result = http://www.php.net/mysql_query($sql);
  5. $row = http://www.php.net/mysql_fetch_array($result);
  6. $recordsCount = $row[0];//pobranie liczby rekordów
  7. try{
  8.    $pager = new Pager(1);
  9.    $pager->SetUseSession(false);
  10.    $pager->SetTotalRecords($recordsCount);
  11.    $pager->Make(true);
  12.    $pag = $pager->Render();
  13.    $start = $pager->GetIndexRecordStart();
  14.    $end = $pager->GetIndexRecordEnd();
  15. }
  16. catch (Exception $e) {
  17.    http://www.php.net/echo $e->getMessage();
  18. }
  19.  
  20. //zapytanie z uwzglenieniem stronicowania
  21. $sql = 'select * from wiadomosci ORDER BY datadodania DESC limit '.$start.','.($end - $start + 1);
  22. //...pobranie wyników i ich wyswietlenie
  23.    
  24.    
  25.    http://www.php.net/echo "<br/>";
  26.    $result = http://www.php.net/mysql_query($sql) or http://www.php.net/die('blad zapytania');
  27.  
  28.    while($val = http://www.php.net/mysql_fetch_array($result))
  29.    {
  30.        $wiadomosc = $val['tresc'];
  31.        http://www.php.net/echo "$wiadomosc<br/><br/><br/>";
  32.    }    
  33.  
  34. http://www.php.net/echo "<div class='pomaranczowy'>";
  35. http://www.php.net/echo 'Strona '.$pager->GetActualPage().' z '.$pager->GetTotalPages();
  36. http://www.php.net/echo "</div>";    
  37. http://www.php.net/echo $pag;//wyswietlenie pager'a
  38. ?>


Drobna modyfikacja Pager.class.php:
  1. <?php
  2. public $RecordsPerPage = 5; //ilosc rekordow na stronie
  3.  
  4. .......................................
  5.  
  6. if (!$_pageLink)
  7.                $_str .= '<span class="uwypuklenie">'.$_page.'</span>';
  8.            else
  9. ?>



Dodanie paru styli i oto efekt:
http://imageshack.us
http://g.imageshack.us/img134/59523821.jpg/1/


Dzięki nospor - rewelacyjna jest ta Twoja klasa. smile.gif

Napisany przez: nospor 27.02.2009, 22:57:39

Cytat
i na to, że trzeba tu podać liczbę.
Skad ten pomysl? Rownie dobrze moze tam byc "alamakota". Ja osobiscie nadaje tam wlasnie nazwy tekstowe a nie liczby

Napisany przez: nieraczek 28.02.2009, 09:03:10

O dzięki za info smile.gif

Napisany przez: pianta_d 6.07.2009, 07:11:07

Witam

Mam problem z sortowaniem po dwóch kolumnach.
Mam kod

  1. <?php
  2. $pager = new EPager('id', null, false,$orders,http://www.php.net/array('typ_ogloszenia' => 'DESC', 'nazwa' => 'ASC'));
  3. ?>

jednak nie srotuje po dwóch kolumnach tylko po pierwszej czyli typ_ogloszenia.

Jak zrobić, aby sortowało po dwóch lub więcej wybranych kolumnach?


EDIT



Poradziłem sobie, dzieki

Napisany przez: hondek 6.07.2009, 12:38:06

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 :

  1. <?php
  2. $res = http://www.php.net/mysql_query($que);
  3.    $recordsCount = http://www.php.net/mysql_num_rows($res);
  4.    try{
  5.        $pager = new Pager('idPagera');
  6.        $pager->RecordsPerPage = 10; // Ilość rekordow na strone
  7.        $pager->SetTotalRecords($recordsCount);
  8.        $pager->Make(true);
  9.        $pag = $pager->Render();
  10.        $start = $pager->GetIndexRecordStart();
  11.        $end = $pager->GetIndexRecordEnd();
  12.    }
  13.    catch (Exception $e) {
  14.        http://www.php.net/echo $e->getMessage();
  15.    }
  16. ?>

Napisany przez: nospor 14.07.2009, 06:59:31

a jak wyswietlasz linki pagera? Sam cos jeszcze generujesz?

Napisany przez: hondek 15.07.2009, 15:48:54

nie, poprostu <?=$pag?>

jedyna rzecz jaka zmienilem w klasie to znak dolaczenia z '?' ma '&'

Napisany przez: nospor 16.07.2009, 07:11:22

Cytat
jedyna rzecz jaka zmienilem w klasie to znak dolaczenia z '?' ma '&'
no to zapewne to jest wlasnie przyczyna problemu winksmiley.jpg

Napisany przez: tomall 7.05.2010, 17:21:15

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.

  1. $pag = $pager->Render('','',true);

Po takim ustawieniu nadal w zmiennej $pag mam gotowe sformatowane linki.
Używam Smarty i wygodniej było by tworzyć linki np. w taki sposób:
  1. {foreach item=link from=$links}
  2. <http://december.com/html/4/element/div.html class='klasa_linku'>{$link}</http://december.com/html/4/element/div.html>
  3. {/foreach}

Korzystam z rozszerzenia EPager.


pozdrawiam





Napisany przez: nospor 8.05.2010, 19:32:19

Metoda Make() zwraca ci tablice. Czytaj komentarze przy funkcjach smile.gif

Napisany przez: limonides 3.08.2010, 13:30:27

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:

  1. elseif ($_GET['m'] == 'menu' && $_GET['id'] == '7') {
  2. include('ciekawostki.php');
  3. }


jak chce przejść do drugiej strony to przenosi mnie do strony głównej a link mam taki index.php?ppidPagera=2

jak zrobić aby zadział pager w momencie kiedy zdefiniowany jest on w innym pliku.

Napisany przez: nospor 3.08.2010, 13:41:31

Wszystko masz w komentarzach

Cytat
/**
* Konstruktor klasy
*
* @param string id - unikalne id pagera.
* @param string pageLink - adres, jaki będzie generowny do linków w pagerze
* Jeśli pageLink zawiera ciąg #PAGE#, oznaczać to będzie, iż link nie będzie modyfikowany przez klase, tylko
* będzie wyglądał jak zapodał użytkownik. Jedyne co zostanie podmienione to #PAGE# na numer strony.
* Jeśli pageLink będzie nullem, klasa wstawi parametr strony do linku uwzględniając przy tym wszystkie parametry jakie były w linku.

* @param mixed userGeneralParam - czy jako parametru strony używać parametru dla danego pagera, czy też ogólnego
* true - uzywać
* false - nie używać
* string - uzywać i ustawić taką nazwę parametru
* parametru określonego w $GeneralParamPageNumber
*/

czyli u Ciebie powinno np. byc
  1. $pager = new Pager('idPagera', null);

Napisany przez: limonides 5.08.2010, 10:02:10

dzieki wielkieee

Napisany przez: mwolodzko 12.08.2010, 11:18:54

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.



  1.  
  2. <?php
  3. $baza_host=("host");
  4. $baza_login=("login");
  5. $baza_haslo=("haslo");
  6. $baza_nazwa=("nazwa");
  7.  
  8. //Laczenie sie z baza mysql
  9. $polaczenie = http://www.php.net/mysql_connect($baza_host, $baza_login, $baza_haslo);
  10. $db = http://www.php.net/mysql_select_db($baza_nazwa);
  11.  
  12. $db_tables = http://www.php.net/array(
  13. 'iddetipovisita' => 'tipovisitas',
  14. 'jakas nazwa pola' => 'jakas nazwa tabeli' // itd.
  15. );
  16. ?>
  17. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  18. <html xmlns="http://www.w3.org/1999/xhtml">
  19. <head>
  20. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  21. <title>AJAX suggest</title>
  22. <meta name="keywords" content="" />
  23. <meta name="description" content="" />
  24. <script src="http://code.jquery.com/jquery-latest.js"></script>
  25. <link rel="stylesheet" href="../master.css" type="text/css" media="screen" title="no title" charset="utf-8">
  26. </head>
  27. <body>
  28. <fieldset>
  29. <legend>Tipo visitas</legend>
  30. <input id="searchinput" type="text" name="search" value="" onkeyup="searchSuggest();" />
  31. <input id="searchsubmit" type="submit" value="Search" />
  32.  
  33. </fieldset>
  34. <script type="text/javascript">
  35. $(document).ready(function(){
  36. $('a').click(function(){
  37. v = $(this).html();
  38. $('input[name=<?php http://www.php.net/echo $_GET['id']; ?>]', opener.document).val(v);
  39. //window.close();
  40. });
  41. });
  42. </script>
  43. <ol>
  44.  
  45.  
  46. <?php
  47. $result = http://www.php.net/mysql_query('SELECT * FROM ' . $db_tables[$_GET['id']]);
  48. while($row = http://www.php.net/mysql_fetch_row($result))
  49. {
  50. http://www.php.net/echo '<li><a href="#">' . $row[1] . '</a></li>';
  51. }
  52. ?>

Napisany przez: nospor 12.08.2010, 17:44:36

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?

Napisany przez: mwolodzko 13.08.2010, 08:19:25

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.

Napisany przez: nospor 13.08.2010, 08:32:45

No to pokaż jak dodajesz.

Napisany przez: mwolodzko 16.08.2010, 10:39:59

Np tak:

  1. <script type="text/javascript">
  2. $(document).ready(function(){
  3. $('a').click(function(){
  4. v = $(this).html();
  5. $('input[name=<?php http://www.php.net/echo $_GET['id']; ?>]', opener.document).val(v);
  6. //window.close();
  7. });
  8. });
  9. </script>
  10. <ol>
  11. <?php/*
  12. $result = mysql_query('SELECT * FROM tipovisitas');
  13. while($row = mysql_fetch_row($result))
  14. */?>
  15. <?
  16. function pasek($rekordow,$na_stronie,$na_pasku,$skrypt,$s) {
  17. $stron = http://www.php.net/ceil($rekordow/$na_stronie);
  18. if ($s<1) $s=1;
  19. if ($s>$stron) $s=$stron;
  20. $koniec = $s+$na_pasku;
  21. if ($s<=$na_pasku) $koniec = $na_pasku*2+1;
  22. if ($koniec>$stron) $koniec = $stron;
  23. $start = $koniec-$na_pasku*2;
  24. if ($start<1) $start=1;
  25. if ($s>1) $p = "<a href='$skrypt".($s-1)."'><<<</a>";
  26. else $p = "<span style='color:gray'><<<</span>";
  27. if ($s<$stron) $n = "<a href='$skrypt".($s+1)."'>>>></a>";
  28. else $n = "<span style='color:gray'>>>></span>";
  29. for ($i=$start; $i<=$koniec; $i++) {
  30. if ($i==$s) $l .= " <span style='color:#cc0000;'><b>$i</b></span> ";
  31. else $l .= "<a href='$skrypt$i'>$i</a>";
  32. }
  33. if ($rekordow<1) $wynik = "brak informacji spełniających kryteria wyszukiwania";
  34. else $wynik = "znalezionych: $rekordow, strona $s z $stron<br />";
  35. if ($stron>1) $wynik .= "$p - $l - $n";
  36. return $wynik;
  37. }
  38.  
  39. $s = ($_GET["s"]>1)?http://www.php.net/number_format($_GET["s"], 0, "", ""):1;
  40. $na_stronie = 5;
  41. $na_pasku = 5;
  42. $skrypt = "options.php?s=";
  43.  
  44. if (http://www.php.net/mysql_connect($sql_serwer, $sql_login, $sql_haslo)
  45. and http://www.php.net/mysql_select_db($sql_baza)) {
  46.  
  47. $start = ($s-1)*$na_stronie;
  48. $wynik = http://www.php.net/mysql_query("SELECT SQL_CALC_FOUND_ROWS *
  49. FROM tipovisitas LIMIT $start, $na_stronie
  50. ");
  51. $rekordow = http://www.php.net/mysql_result(http://www.php.net/mysql_query("SELECT FOUND_ROWS()"),0);
  52.  
  53. $stron = http://www.php.net/ceil($rekordow/$na_stronie);
  54. if ($s>$stron and $rekordow>0) {
  55. $start = ($stron-1)*$na_stronie;
  56. $wynik = http://www.php.net/mysql_query("SELECT *
  57. FROM tipovisitas LIMIT $start, $na_stronie
  58. ");
  59. }
  60.  
  61. http://www.php.net/mysql_close();
  62. }
  63.  
  64. http://www.php.net/echo "<p style='text-align:center;'>";
  65. http://www.php.net/echo pasek($rekordow,$na_stronie,$na_pasku,$skrypt,$s);
  66. http://www.php.net/echo "</p>";
  67.  
  68. while($wynik and $dane = http://www.php.net/mysql_fetch_assoc($wynik)) {
  69. http://www.php.net/echo "<p>";
  70. foreach($dane as $pole) http://www.php.net/echo " [$pole] ";
  71. http://www.php.net/echo "</p>";
  72. }
  73. ?>

Napisany przez: nospor 16.08.2010, 10:49:04

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?

Napisany przez: mwolodzko 16.08.2010, 11:00:07

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".

Napisany przez: edwarpan 25.08.2010, 16:29:07

Coś mi nie działa.

  1. <?php
  2. require('config.php');
  3.  
  4.  
  5.  
  6. http://www.php.net/session_start();
  7. require_once('Pager.class.php');
  8. $sql = 'SELECT count(*) FROM newsy';
  9. $result = http://www.php.net/mysql_query($sql);
  10. $row = http://www.php.net/mysql_fetch_array($result);
  11. $recordsCount = $row[0];//pobranie liczby rekordów
  12. try{
  13. $pager = new Pager('idPagera');
  14. $pager->SetTotalRecords($recordsCount);
  15. $pager->Make(true);
  16. $pag = $pager->Render();
  17. $start = $pager->GetIndexRecordStart();
  18. $end = $pager->GetIndexRecordEnd();
  19. }
  20. catch (Exception $e) {
  21. http://www.php.net/echo $e->getMessage();
  22. }
  23.  
  24. //zapytanie z uwzglenieniem stronicowania
  25. $sql = 'SELECT * FROM newsy LIMIT '.$start.','.($end - $start + 1);
  26. //...pobranie wyników i ich wyswietlenie
  27.  
  28. http://www.php.net/echo $pag;//wyswietlenie pager'a
  29.  
  30. ?>

Napisany przez: nospor 25.08.2010, 18:03:40

Cytat
Coś mi nie działa.
To coś napraw.....


Czy tak cięzko napisać czym objawia się to "niedziałanie"?

ps:
Cytat
//...pobranie wyników i ich wyswietlenie
Ale wstawiłeś wlasciwy kod w to miejsce?

Napisany przez: northwest 30.11.2010, 12:39:44

Witam serdecznie,
cosik nie chce mi zadziałać ta klasa.Napisałem taki kod:

  1. $recordsCount = 11;//pobranie liczby rekordów
  2. $start = null;
  3. $end = null;
  4. try{
  5. //$pager = new Pager('idPagera');
  6. //$pager = new Pager('idPagera', null);
  7. $pager = new Pager ($_GET['id'], "listaobiektow,".$_GET['k1'].",#PAGE#,#PAGE#,".$_GET['k4'].",".$_GET['k5'].".html");
  8. $pager->RecordsPerPage = 2;
  9. $pager->SetTotalRecords($recordsCount);
  10. $pager->Make(true);
  11. $pag = $pager->Render();
  12. $start = $pager->GetIndexRecordStart();
  13. $end = $pager->GetIndexRecordEnd();
  14. }
  15. catch (Exception $e) {
  16. http://www.php.net/echo $e->getMessage();
  17. }
  18. $zapytanie_wyswietlajacelista .= " ORDER by $sortujemy LIMIT ".$start.','.($end - $start + 1);
  19. $wyswietlamyliste2 = http://www.php.net/mysql_query($zapytanie_wyswietlajacelista);
  20. http://www.php.net/echo $zapytanie_wyswietlajacelista."----".$recordsCount;


Link otrzymuje w prawidłowej formie, tj:
listaobiektow,2,4,4,,.html
listaobiektow,2,6,6,,.html
itp.

tylko nie wiem czemu nie przechodzi to na zapytanie ($zapytanie_wyswietlajacelista) - bez względu czy kliknę na "1", "5" czy "10" na pagerze:
  1. SELECT * FROM cms_obiekty ORDER BY special DESC LIMIT 0,2



Wie ktoś może co zrobiłem nie tak?


Napisany przez: nospor 30.11.2010, 12:51:05

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' smile.gif 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 smile.gif

Napisany przez: northwest 30.11.2010, 13:01:52

  1. http://www.php.net/array ( [gt_id] => listaobiektow [k1] => 2 [k2] => 6 [k3] => 6 [k4] => [k5] => [modrw] => )


mam coś takiego winksmiley.jpg
nie ma u mnie zmiennej page....
to: const PAGE = 'page'; wystarczy że zamienię na k2 i bedzie si?

Napisany przez: nospor 30.11.2010, 13:15:17

Nie, stalych sie nie zmienia! smile.gif

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

Napisany przez: northwest 30.11.2010, 13:21:50

działa, dzięki wielkie:)))

ps. gdybym chciał ostylować to, to w którym miejscu najelpiej to zrobić (numerki i strzałki)?

Napisany przez: nospor 30.11.2010, 13:31:02

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 smile.gif

Napisany przez: northwest 30.11.2010, 14:15:53

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ć?

Napisany przez: nospor 30.11.2010, 14:21:03

Cytat
nie da się tego jakoś prościej zrobić?

Nie.
Na standardzie dałem taki wyglad jaki dalem. Jak się nie podoba to trzeba zrobic jeden z trzech kroków, które podalem. Robisz to raz i masz juz smile.gif
Od biedy mozesz sie wbic w kod klasy i bezposrednio w kodzie klasy zmienic.

Napisany przez: northwest 30.11.2010, 14:57:41

zrobiłem sobie takie coś (walcze z klasą):

  1. protected function createHTMLLink($title, $link, $text) {
  2. return '<b><a title="'.$title.'" href="'.$link.'">'.$text.'</a></b>';
  3. }
  4. protected function createHTMLLink2($title, $link, $text) {
  5. return '<b id=\"strony1\"><a title="'.$title.'" href="'.$link.'">'.$text.'</a></b>';
  6. }


w którym miejscu podmienić aktualny numerek (aktualnie wybraną stronkę) ażeby budować link w oparciu o tą 2 funkcje?

Napisany przez: nospor 30.11.2010, 15:00:12

Cytat
w którym miejscu podmienić aktualny numerek (aktualnie wybraną stronkę) ażeby budować link w oparciu o tą 2 funkcje?
NIe rozumiem pytania

Napisany przez: northwest 30.11.2010, 15:23:30

generalnie chciałbym efekt taki uzyskać:

  1. <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>
  2. <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>
  3. <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 -->
  4. <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>


i kombinowałem z tą funkcją dla aktualnie zaznaczonej:
  1. protected function createHTMLLink2($title, $link, $text) {
  2. return '<b id=\"strony1\"><a title="'.$title.'" href="'.$link.'">'.$text.'</a></b>';
  3. }


dobrze kombinuje?winksmiley.jpg
nie wiem czy dobrze wytłumaczyłem o co mi chodzi??smile.gif

Napisany przez: nospor 30.11.2010, 20:08:29

No ale po co tworzysz metode createHTMLLink2? Powiedzialem, ze skoro za duzo masz zachodu to nadpisz zmien kod w klasie i juz.

Napisany przez: northwest 30.11.2010, 23:40:47

zadziałało, dzięki WIELKIE smile.gif))

Napisany przez: Ziom73 7.02.2011, 19:46:26

Mi wywala:

Kod
Fatal error: Uncaught exception 'Exception' with message 'Method GetIndexRecordStart() You must call after Make()' in /opt/lampp/htdocs/infusions/pager/Pager.class.php:218 Stack trace: #0 /opt/lampp/htdocs/php/adm/not.php(38): Pager->GetIndexRecordStart() #1 /opt/lampp/htdocs/themes/EasyRound/administration/theme.php(163): include('/opt/lampp/htdo...') #2 /opt/lampp/htdocs/sys/adm/not.php(12): include('/opt/lampp/htdo...') #3 {main} thrown in /opt/lampp/htdocs/infusions/pager/Pager.class.php on line 218

Oto kod:
Kod
require('./../../infusions/pager/Pager.class.php');
$sql = 'select count(*) from `note`';
   $result = mysql_query($sql);
   $row = mysql_fetch_array($result);
   $recordsCount = $row[0];//pobranie liczby rekordów
   $pager = new Pager('idPagera');
   $pager->SetTotalRecords($recordsCount);//ustawienie liczby rekordów
   $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 `note` limit '.$start.','.($end - $start + 1);
   //...pobranie wyników i ich wyswietlenie
   echo $renderPager; //wyswietlenie pager'a

Napisany przez: nospor 8.02.2011, 07:11:04

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ć

Napisany przez: Ziom73 13.02.2011, 23:26:19

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 smile.gif

Napisany przez: br0nks 27.02.2011, 22:54:44

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:

  1. <?
  2. //Ładowaniu pliku konfiguracyjnego bazy danych i połączenie z bazą
  3. include "config.php";
  4.  
  5. //Ustalenie ilości wyświetlanych newsów na stronie
  6. http://www.php.net/define('limit_newsow', 15);
  7.  
  8. $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;
  9.  
  10. //Pobiera ilosc_newsow rekordów z bazy, sortując wg daty rosnąco, zaczynając od $_GET['s']*ilosc_newsow
  11. $RES = http://www.php.net/mysql_query($result); // wykonujemy zapytanie
  12. while($AFR = http://www.php.net/mysql_fetch_assoc($RES)){
  13.  
  14. /*Wyświetlanie wyników:*/
  15.  
  16. $id=''.$AFR['id'].'';
  17. $text=''.$AFR['text'].'';
  18.  
  19.  
  20. http://www.php.net/echo "$id - $text";
  21.  
  22. }
  23.  
  24. ?>


a dokladnie tu:
Kod
$result = "SELECT SQL_CALC_FOUND_ROWS * FROM newsy ORDER BY id DESC, id DESC LIMIT ".mysql_escape_string((int)$_GET['s'] *limit_newsow).",".limit_newsow;

jest jakis blad, ze gdy ide na id=1 to pokazuja mi sie rekordy kolejne (z id=2)..
a chcialbym aby pod id=1 byly te, ktore sa aktualnie..

a dokladnie:
Kod
id DESC LIMIT ".mysql_escape_string((int)$_GET['s'] *limit_newsow).",".limit_newsow;

ale nie wiem jak nawet tu pokombinowac, aby bylo dobrze..

prosze o pomoc:(

EDIT2:

moze tu chodzi o to, ze wyciagam wg ID? a np kilka id nie ma, bo usuniete zostaly.. i np pomija mi przez to jedna strone?
jak zrobic, zeby zliczal poprawnie? bo np teraz mam 23 strony niby.. z czego 23 jest pusta..

wszystkie wskazowki bylyby mega pomocne!

Napisany przez: nospor 28.02.2011, 07:15:48

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.

Napisany przez: br0nks 28.02.2011, 10:01:49

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.

Napisany przez: nospor 28.02.2011, 10:16:31

No to pokaż kod, co do którego masz pytanie i który zawiera moje stronicowanie, bo już nie wiem o co pytasz smile.gif

Napisany przez: br0nks 28.02.2011, 14:29:13

  1. <?
  2. //Ładowaniu pliku konfiguracyjnego bazy danych i połączenie z bazą
  3. include "config.php";
  4.  
  5. //Ustalenie ilości wyświetlanych newsów na stronie
  6. http://www.php.net/define('limit_newsow', 15);
  7.  
  8. $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;
  9.  
  10. //Pobiera ilosc_newsow rekordów z bazy, sortując wg daty rosnąco, zaczynając od $_GET['s']*ilosc_newsow
  11. $RES = http://www.php.net/mysql_query($result); // wykonujemy zapytanie
  12. while($AFR = http://www.php.net/mysql_fetch_assoc($RES)){
  13.  
  14. /*Wyświetlanie wyników:*/
  15.  
  16. $id=''.$AFR['id'].'';
  17. $text=''.$AFR['text'].'';
  18.  
  19.  
  20. http://www.php.net/echo "$id - $text";
  21.  
  22. }
  23.  
  24. ?>


  1. <?php
  2. require_once('Pager.class.php');
  3. $sql = 'select count(*) from newsy';
  4. $result = http://www.php.net/mysql_query($sql);
  5. $row = http://www.php.net/mysql_fetch_array($result);
  6. $recordsCount = $row[0];//pobranie liczby rekordĂłw
  7. try{
  8. $pager = new Pager('s');
  9. $pager->SetTotalRecords($recordsCount);
  10. $pager->Make(true);
  11. $pag = $pager->Render();
  12. $start = $pager->GetIndexRecordStart();
  13. $end = $pager->GetIndexRecordEnd();
  14. }
  15. catch (Exception $e) {
  16. http://www.php.net/echo $e->getMessage();
  17. }
  18.  
  19. //zapytanie z uwzglenieniem stronicowania
  20. $sql = 'select * from newsy limit '.$start.','.($end - $start + 1);
  21. //...pobranie wynikĂłw i ich wyswietlenie
  22.  
  23. http://www.php.net/echo $pag;//wyswietlenie pager'a
  24. ?>



i caly czas chodzi o to co wyzej:)
ze gdy mam index.php?s=0 to wzsystko jest tak jak aktualnie w bazie,
a gdy klikne na index.php?s=1 to pokazuja mi sie rekordy nie kolejne, tylko jeszcze kolejne, czyli omija jedna 15nastke... i pod s=1 mam to co POWINNO byc pod s=2. a pod s=0 to co pod s=1 winno byc:)

i chcialbym aby index.php?s=0 bylo tym index.php?s=1
a nie idzie tego zrobic :/

jasniej chyba sie nie da ;p

Napisany przez: nospor 28.02.2011, 14:46:00

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

Napisany przez: br0nks 28.02.2011, 17:46:24

teraz to ja nie rozumiem biggrin.gif 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:)

Napisany przez: nospor 28.02.2011, 22:06:56

Cytat
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-...-using-css.html
lub tak:
http://www.thewebhelp.com/css/pagination-style-template/?
Oczywiście, że można. Na wiele sposobów.
Możesz napisać funkcję generującą kod pagera, możesz przekazać funkcję generującą kod pagera, możesz pobrać tablicę pagera i sam wygenerować dla niej kod. Wszystko masz w przykładach w paczce

Napisany przez: br0nks 28.02.2011, 23:06:04

sweitnie, nie pomogles mi w niczym o co pytalem.. dzieki wielkie.

Napisany przez: nospor 28.02.2011, 23:50:05

blink.gif

Napisany przez: br0nks 28.04.2011, 19:06:26

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

Kod
Parse error: syntax error, unexpected '{' in /index.php on line 316


a 316 linijka index.php wygląda tak:
Kod
try{


a całe zapytanie tak:
  1. <?php
  2. require_once('Pager.class.php');
  3. $sql = 'select count(*) from newsy';
  4. $result = http://www.php.net/mysql_query($sql);
  5. $row = http://www.php.net/mysql_fetch_array($result);
  6. $recordsCount = $row[0];//pobranie liczby rekordĂłw
  7. try{
  8. $pager = new Pager('s');
  9. $pager->SetTotalRecords($recordsCount);
  10. $pager->Make(true);
  11. $pag = $pager->Render();
  12. $start = $pager->GetIndexRecordStart();
  13. $end = $pager->GetIndexRecordEnd();
  14. }
  15. catch (Exception $e) {
  16. http://www.php.net/echo $e->getMessage();
  17. }
  18.  
  19. //zapytanie z uwzglenieniem stronicowania
  20. $sql = 'select * from newsy limit '.$start.','.($end - $start + 1);
  21. //...pobranie wynikĂłw i ich wyswietlenie
  22.  
  23. http://www.php.net/echo $pag;//wyswietlenie pager'a
  24. ?>


lub jeżeli usunę całe to zapytanie, to wyskakuje kolejny błąd:
  1. 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


a 34 linijka Pager.class.php wygląda tak:
Kod
const GOTO_FIRST = 'gtf';


i o co tu chodzi to nie mam pojęcia...a nawet nic nie zmieniałem od kiedy wszystko dobrze działało..

Napisany przez: nospor 28.04.2011, 19:08:59

Odpalsz skrypt napisany w php5 na php4.
Skoro nagle ci przestało działać to zapewne zmienił ci się php smile.gif

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 smile.gif

Napisany przez: br0nks 28.04.2011, 19:15:13

dokładnie tam mam hosta..
i co teraz mam zrobić z tym fantem? smile.gif

Napisany przez: dawidox66 28.04.2011, 21:11:42

a w ogole jaki cel jest takiego downgrade?

Napisany przez: mlawnik 28.04.2011, 21:22:14

Może rozszerzenie *.php5?

Ale jak wywalili php5 to zmiana dostawcy :|

Napisany przez: br0nks 28.04.2011, 21:33:32

Cytat(mlawnik @ 28.04.2011, 21:22:14 ) *
Może rozszerzenie *.php5?



dokładnie tak. gra gitarka teraz guitar.gif

dzieki rolleyes.gif

Napisany przez: mlawnik 28.04.2011, 22:18:41

Proszę bardzo.

Napisany przez: br0nks 28.04.2011, 22:37:50

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:

Kod
AddType application/x-httpd-php5 .php5


gdyby ktoś potrzebowałsmile.gif

Napisany przez: lobopol 11.05.2011, 13:49:52

Mam problem ze zdefiniowanym linkiem

  1. $oPager = new lib_Pager('pagination', lib_Url::make('main',http://www.php.net/array('page'=>'#PAGE#')),false); //link ma formę link,#PAGE#.html
  2. $oPager->SetTotalRecords(10000);
  3. $oPager->SetRecordsPerPage(10);
  4. $oPager->SetPagesPerNav(10);
  5. $oPager->Make();
  6. $this->sNav = $oPager->Render();
  7.  

Paginacja jest tworzona, ale nie zmieniają się linki w niej po przejściu na kolejne strony

Ps. Już sobie poradziłem drobna modyfikacja aby nie patrzeć na geta, a na parametr przekazywany

Napisany przez: northwest 24.05.2011, 22:35:05

Witam serdecznie,
mam taki kod:

  1. try {
  2. $tablicailosci = $ms->query_select("SELECT COUNT(id) AS ile FROM baza ;");
  3. } catch (Exception $error) {
  4. 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();
  5. }
  6. try {
  7. //$pager = new Pager($webid['4'], "$url/cars/komis/page/#PAGE#", 'strona');
  8. $pager = new Pager('', "$url/cars/komis/page/#PAGE#");
  9. $pager->RecordsPerPage = 1;
  10. $pager->SetTotalRecords($tablicailosci['0']['ile']);
  11. $pager->Make(true);
  12. $pag = $pager->Render();
  13. $start = $pager->GetIndexRecordStart();
  14. $end = $pager->GetIndexRecordEnd();
  15. } catch (Exception $e) {
  16. http://www.php.net/echo $e->getMessage();
  17. }

linki mam w takiej formie: mojanazwa.pl/cars/komis/page/1 , mojanazwa.pl/cars/komis/page/2 itp...

Menu wyświetla mi się poprawnie, tylko jak kliknę na jakąś stronę, to nie zaznacza się poprawna wartość na tej paginacji sad.gif
np mam : 1,2,3,4,5,6 - klikam na 4, strona się przaładowywuje ale dalej mam zaznaczoną 1 sad.gif


Wie ktoś może dlaczego?


northwest

Napisany przez: nospor 25.05.2011, 06:21:50

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ę.

Napisany przez: northwest 25.05.2011, 08:44:30

tablica jest pusta sad.gif

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?

Napisany przez: nospor 25.05.2011, 08:49:18

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:

  1. //.....
  2. $pager = new Pager('', "$url/cars/komis/page/#PAGE#");
  3. $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
  4. $pager->RecordsPerPage = 1;
  5. $pager->SetTotalRecords($tablicailosci['0']['ile']);
  6. $pager->Make(true);
  7. $pag = $pager->Render();
  8. //.....

Napisany przez: northwest 25.05.2011, 09:16:25

zrobiłem tak jak mówiłeś:

  1. $pager = new Pager('', "$url/cars/komis/page/#PAGE#");
  2. $pager->SetActualPage("$url/cars/komis/page/".$webid['4']);
  3. $pager->RecordsPerPage = 1;
  4. $pager->SetTotalRecords($tablicailosci['0']['ile']);
  5. $pager->Make(true);
  6. $pag = $pager->Render();


gdzie $webid['4'] zawiera aktualny numer strony i nie działa.... zaznacza uparcie 4 strone.... bez względu co wybiore:/

Napisany przez: nospor 25.05.2011, 09:32:55

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.

Cytat
dzie $webid['4'] zawiera aktualny numer strony i nie działa
Jeśli to $webid['4'] zawiera wartość parametru page z linku to masz wstawić tak:
$pager->SetActualPage($webid['4']);

Napisany przez: northwest 25.05.2011, 09:37:32

super,działa smile.gif)) dzięki:)

Napisany przez: JamalBIG 4.07.2011, 20:03:10

Witam

Może mi ktoś podpowiedzieć jak pozbyć się błędu:

  1. Parse error: syntax error, unexpected '{' in /homez.184/domciu/www/funcs/ogloszenia/kategorie.php on line 87

Wyskakuje mi to po wgraniu na serwer ovh (na innych serwerach nie ma problemu) - fragment kodu to:
  1. try{
  2. $pager_promowane = new Pager('promowane');
  3. $pager_promowane->SetTotalRecords($recordsCount_promowane);
  4. $pager_promowane->Make(true);
  5. $pag_promowane = $pager_promowane->Render();
  6. $start_promowane = $pager_promowane->GetIndexRecordStart();
  7. $end_promowane = $pager_promowane->GetIndexRecordEnd();
  8. }
  9. catch (Exception $e) {
  10. http://www.php.net/echo $e->getMessage();
  11. }

Błąd odnosi się do linijki 'try{'

Z góry dziękuję za pomoc
Pozdrawiam

Napisany przez: nospor 5.07.2011, 07:22:11

Odpalasz to na php4 a powinienes na php5

Napisany przez: melkorm 5.07.2011, 07:30:19

W pliku .htaccess:

Dla 5.3 :

Kod
SetEnv PHP_VER 5_TEST


dla 5.x - nie pamiętam dokładnie jaka wersja
Kod
SetEnv PHP_VER 5


Napisany przez: edzio_max 12.07.2011, 16:56:49

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ć smile.gif

Napisany przez: pawel.ad 11.08.2011, 12:40:53

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.

Napisany przez: nospor 11.08.2011, 12:42:50

$pager->SetUseSession(false);

Napisany przez: pawel.ad 11.08.2011, 12:54:23

Dziękuje bardzo smile.gif

Napisany przez: Sobak 27.01.2013, 09:34:32

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 smile.gif

Bez zbędnego przeciągania:

  1. // końcówka metody Make()
  2. return $this->toArray();
  3.  
  4. // Ok, w związku z tym poszedłem pod wskazany adres i ujrzałem to:
  5. // końcówka metody toArray()
  6. return true;


Wystarczyło oczywiście zamienić na:
  1. return $this->array;

i działa ładnie.

Jeśli źle zrozumiałem zasadę działania klasy i narobiłem niepotrzebnego zamieszania, to przepraszam biggrin.gif będę jednak wdzięczny za wyjaśnienie co w takim wypadku robiłem źle.

Napisany przez: nospor 28.01.2013, 08:56:47

  1. /**
  2. * Zwraca tablicę pager'a
  3. *
  4. * @return array
  5. */
  6. public function GetArray() {
  7. if (http://www.php.net/is_null($this->indexRecordStart))
  8. throw new Exception(http://www.php.net/sprintf($this->errorMsg['call_get'],'GetArray'));
  9. return $this->array;
  10. }

I myślę że już nic więcej tłumaczyć nie muszę smile.gif

Napisany przez: Sobak 2.02.2013, 09:42:02

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 smile.gif

Napisany przez: pionas 13.02.2013, 09:39:18

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

Napisany przez: nospor 13.02.2013, 10:01:58

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)