Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pager (stronicowanie), klasa, php4 i php5
nospor
post
Post #1





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




info
pobierz

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.    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 = mysql_query($sql);
  4.    $row = 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.    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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif) ). Chcąc użyc nowej metody generowania linków, wystarczy wywołać metodę render() z parametrem true:
  1. <?php
  2. echo $pager->Render(true);
  3. ?>

Mam nadzieję, że w ten sposób usatysfakcjonowałem parę osób (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
12 Stron V   1 2 3 > »   
Start new topic
Odpowiedzi (1 - 99)
Bakus
post
Post #2


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




@Bakus
Widzę że kod przeanalizowales dokladnie (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Co do js to zapomnialem dodać, iż jest wymagane (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
Bakus
post
Post #4


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

Ostrzeżenie: (0%)
-----


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)
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




mówisz - masz (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Bakus
post
Post #6


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

Ostrzeżenie: (0%)
-----


cudo (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Balas
post
Post #7





Grupa: Zarejestrowani
Postów: 347
Pomógł: 0
Dołączył: 27.08.2005
Skąd: Inowrocław

Ostrzeżenie: (0%)
-----


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

Ten post edytował OnE.Killer 21.09.2005, 18:13:15
Go to the top of the page
+Quote Post
NuLL
post
Post #8





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Masz wszystko przecież jak wół napisane.
Go to the top of the page
+Quote Post
AxZx
post
Post #9





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


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

powinno byc &amp; zamiast &
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




@OnE.Killer odpowiedzialem tutaj:
http://forum.php.pl/index.php?act=ST&f=27&...t=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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
AxZx
post
Post #11





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
AxZx
post
Post #13





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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ą (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Co do & to juz poprawiłem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
Go to the top of the page
+Quote Post
AxZx
post
Post #15





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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 ?
Go to the top of the page
+Quote Post
AxZx
post
Post #17





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post
Post #18





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




O, i nie można było tak od razu ? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Teraz wszystko kumam (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #19





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
AxZx
post
Post #20





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


dobry pomysl

tylko nie kazdy jest takim geniuszem i nie kazdy wie jaka funkcjonalnosc powinna miec taka klasa.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #21





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #22





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
sf
post
Post #23





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
AxZx
post
Post #24





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


czy trwaja prace nad rozbudowa skryptu?(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #25





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




NIestety nie. Powód ciągle ten sam (IMG:http://forum.php.pl/style_emoticons/default/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)
Go to the top of the page
+Quote Post
basu
post
Post #26





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 26.12.2005

Ostrzeżenie: (0%)
-----


Czy wiecie jak zrobić/zodyfikować pagera, aby chodził na PDO?
Probuje cos wykombinować, ale opornie mi to wychodzi.
Go to the top of the page
+Quote Post
nospor
post
Post #27





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




pytasz juz o to tutaj: http://forum.php.pl/index.php?showtopic=39...=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
Go to the top of the page
+Quote Post
Diablos
post
Post #28





Grupa: Zarejestrowani
Postów: 165
Pomógł: 6
Dołączył: 17.06.2005

Ostrzeżenie: (0%)
-----


A jak zastosowac pagera przy template'ach ? Przykladowo OPT ?
Go to the top of the page
+Quote Post
nospor
post
Post #29





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




kurka, jakis dziwny jestem. OPT tez nie uzywalem (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
basu
post
Post #30





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 26.12.2005

Ostrzeżenie: (0%)
-----


Jednak sobie poradzilem ze stronicowaniem w PDO (IMG:http://forum.php.pl/style_emoticons/default/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. 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. echo $kolumna."<br>";
  42. }
  43.  
  44.  
  45.  echo $renderPager; //wyswietlenie pager'a
  46.  
  47. ?>


to chodzi idealnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Polecam ten pager, dobrze sie sprawuje.

Prosze uzywac bbCode - NuLL
Go to the top of the page
+Quote Post
nospor
post
Post #31





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
basu
post
Post #32





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 26.12.2005

Ostrzeżenie: (0%)
-----


w sumie racja (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
ale najwazniesze ze chodzi.

Za nabijanie postow sa ostrzezenia.... - NuLL
Go to the top of the page
+Quote Post
SongoQ
post
Post #33





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
bigZbig
post
Post #34





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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

Ten post edytował bigZbig 26.01.2006, 16:07:48
Go to the top of the page
+Quote Post
nospor
post
Post #35





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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... (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) (żartuję).

Wszystkie uwagi zapisalem se w mej pamięci. jej czyszczenia nie przewiduję w najbliższym czasie (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Fallout
post
Post #36





Grupa: Zarejestrowani
Postów: 154
Pomógł: 0
Dołączył: 17.12.2003
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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(isset($_GET['gid'])and(!isset($_GET['fid'])))
  11. {
  12. $gid = (int)$_GET['gid'];
  13. $db->DoSql("SELECT galeria_katalog FROM galerie WHERE galeria_id = $gid");
  14. $kat = 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=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(file_exists($mini))
  29. {
  30. $link = "<a href=\"?s=galerie&amp;gid=$gid&amp;fid=$fid&amp;p=$pid\">";
  31. echo $link."<img src=\"$mini\" border=\"1\"></a>&nbsp;\n";
  32. }
  33. else // jesli nie, to ją generuje i wyswietla
  34. {
  35. echo "Brak miniatury";
  36. }
  37. }
  38. else echo "Brak wpisu w bazie dla wybranego pliku!<br>\n";
  39. }
  40. }
  41. elseif(isset($_GET['gid'])and(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 = 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 = mysql_result($db->wynik,0,0);
  51. if($ile_zdjec==0)
  52. {
  53. echo "Brak zdjęć";
  54. }
  55. else
  56. {
  57. echo '<div align="center"><a href="?s=galerie&amp;gid='.$gid.'&amp;p='.$pid.'">';
  58. 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 = mysql_fetch_array($res))
  72. {
  73. $opis = $r['zdjecie_opis'];
  74. $plik = $r['zdjecie_plik'];
  75.  
  76. echo "<br /><img src=\"$dir$plik\" border=\"1\"><br />$opis<br />";
  77. }
  78. 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=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. 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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) no chyba ze cos ja przegapilem :/ mam nadzieje ze cos poradzicie, bo ja sie juz poddalem :]

pozdrawiam
Marcin
Go to the top of the page
+Quote Post
nospor
post
Post #37





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




  1. <?php
  2. $pager->$_startRecord = $fid;
  3. ?>
To nie tak dziala (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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. ?>
(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Teraz dziala?
Go to the top of the page
+Quote Post
Fallout
post
Post #38





Grupa: Zarejestrowani
Postów: 154
Pomógł: 0
Dołączył: 17.12.2003
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Hehe, wierze na słowo bo nie wiem czemu mimo zeby mnie powiadamilo o odp to nic mi nie przyszlo wiec nie zagladalem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) W miedzy czasie napisalem sobie to wszystko od nowa i nie korzystajac z Twojego pagera (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Choc zostal na ksiazce gosci, gdzie sprawuje sie znakomicie (IMG:http://forum.php.pl/style_emoticons/default/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 = mysql_result($db->wynik,0,0);
  19. $dir = './zdjecia/'.$kat.'/';
  20. $dir_mini = './zdjecia/'.$kat.'/mini/';
  21. // wypelnienie tablicy danymi
  22. $temp = array();
  23. $count = 0;
  24. while($r = mysql_fetch_array($lres))
  25. {
  26. $opis = $r['zdjecie_opis'];
  27. $plik = $r['zdjecie_plik'];
  28. $dane = array($count,$dir.$plik,$opis,$dir_mini.$plik);
  29. $temp[$count] = implode(',',$dane); 
  30. $count++;
  31. }
  32. $lista = $temp;
  33.  
  34. if(isset($_GET['gid'])and(!isset($_GET['cid']))) // wyswwietla miniatury
  35. {
  36. if($count<>0)
  37. {
  38. foreach($lista as $id)
  39. {
  40. $data = 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(file_exists($min))
  47. {
  48. $link = "<a href=\"?s=galerie&amp;gid=$gid&amp;eid=$count&amp;cid=$cid&amp;p=$pid\">";
  49. echo $link."<img src=\"$min\" border=\"1\"></a>&nbsp;\n";
  50. }
  51. }
  52. }
  53. else echo '<br /><img src="buttony/brakzdjec.jpg"><br /><br />';
  54. }
  55. elseif(isset($_GET['gid'])and(isset($_GET['cid']))) // pokazuje wybrane zdjecie
  56. {
  57. $dane = $lista[$cid];
  58. $data = 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(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. echo '<div align="center">'.$prev;
  85. echo '<a href="?s=galerie&amp;gid='.$gid.'&amp;p='.$pid.'">';
  86. echo '<img src="buttony/powrotdogalerii.jpg" border="0"></a>';
  87. echo $next.'</div>';
  88.  
  89. 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=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. 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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #39





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/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ó (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) )

Co do Twojego skryptu, to nie mam sily/czasu go analizowac. Ale jesli ci dziala i ci wystarcza, to uzywaj do woli (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) No i napewno ma zdecydowanie mniej kodu niz moja klasa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Legro
post
Post #40





Grupa: Zarejestrowani
Postów: 233
Pomógł: 3
Dołączył: 18.07.2005

Ostrzeżenie: (40%)
XX---


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)



moj kod jest taki:

  1. <?php
  2.  
  3. $dowcipy = mysql_query (" Select * From `dowcipy` Where `akt_d` = '1' and `kat_d` = '{$_GET['id_kat']}' ");
  4. $num_row = mysql_num_rows ( $dowcipy );
  5.  
  6. if ( $num_row != 0 ) {
  7.  
  8. while ( $r_dowcipy = mysql_fetch_array ( $dowcipy, MYSQL_ASSOC )) {
  9.  
  10. $list_dowcipy .= ( 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.
Go to the top of the page
+Quote Post
Levabul
post
Post #41





Grupa: Zarejestrowani
Postów: 197
Pomógł: 0
Dołączył: 11.07.2005

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) . Poprawna linia 128:
  1. <?php
  2. $this->_pagesOnNav = $pon;
  3. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #42





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




@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 = mysql_query($sql);
  5.    $row = 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 = mysql_query($sql);
  18. if ( $num_row != 0 ) {
  19.  
  20. while ( $r_dowcipy = mysql_fetch_array ($dowcipy , MYSQL_ASSOC )) {
  21.  
  22. $list_dowcipy .= ( 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.    echo $renderPager; //wyswietlenie pager'a
  36.  
  37.  
  38. ?>


@Levabul wielkie dzięki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) nie wiem skąd ta literowka sie tam wytrzasnęła
Go to the top of the page
+Quote Post
Legro
post
Post #43





Grupa: Zarejestrowani
Postów: 233
Pomógł: 3
Dołączył: 18.07.2005

Ostrzeżenie: (40%)
XX---


@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. echo $renderPager;
  3. ?>


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

Pozdrawiam.

Ten post edytował Legro 19.03.2006, 16:59:22
Go to the top of the page
+Quote Post
bohusz
post
Post #44





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 28.03.2006

Ostrzeżenie: (0%)
-----


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 = mysql_num_rows(mysql_query("SELECT * FROM $ogloszenia_table $where"));
  3. $result = mysql_query("SELECT * FROM $ogloszenia_table $where LIMIT $limit,$og_limit");
  4.  
  5. while($r = 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. echo'<fieldset>'.$photo.'Fotoanons: <br /><a href="lista.php?id='.$id.'">'.$title.'</a></fieldset><br />';
  13. }
  14. if($ile == '0'){ echo'brak wyniku'; }
  15.  
  16.  
  17. ?>


Jeszcze raz z góry dziękuję
Go to the top of the page
+Quote Post
nospor
post
Post #45





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




  1. <?php
  2.  
  3. $sql = "SELECT count(*) FROM $ogloszenia_table $where";
  4.    $result = mysql_query($sql);
  5.    $row = 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 = mysql_query($sql); 
  19.    while($r = 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. echo'<fieldset>'.$photo.'Fotoanons: <br /><a href="lista.php?id='.$id.'">'.$title.'</a></fieldset><br />';
  27. }
  28.    echo $renderPager; //wyswietlenie pager'a
  29. if($recordsCount == ){ echo'brak wyniku'; }
  30.  
  31. ?>
widze ze dales duzo rekordow na stronie: 150. wow (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

ps: zaraz usune wiekszą czesc Twego kodu, gdyz generowanie formularza nam do szczescia nie jest potrzebne (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
ps2: i uzywaj na przyszlosc wlasciwego bbcode
Go to the top of the page
+Quote Post
acztery
post
Post #46





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

Ostrzeżenie: (0%)
-----


ś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 = mysql_query($sql);
  5.  $recordsCount = mysql_result($result,0,"ile"); 
  6.  
  7. ?>


Ten post edytował acztery 1.04.2006, 15:22:24
Go to the top of the page
+Quote Post
nospor
post
Post #47





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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ść (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Sposób uzywania klasy nie uległ zmianie (jest kompatybilna wstecz (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ). Chcąc użyc nowej metody generowania linków, wystarczy wywołać metodę render() z parametrem true:
  1. <?php
  2. echo $pager->Render(true);
  3. ?>

Mam nadzieję, że w ten sposób usatysfakcjonowałem parę osób (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
acztery
post
Post #48





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

Ostrzeżenie: (0%)
-----


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

Ten post edytował acztery 3.04.2006, 11:41:48
Go to the top of the page
+Quote Post
nospor
post
Post #49





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
jeszcze zapamietywanie podstron w sesjach i bedzie perfekto
No przecież to jest (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
acztery
post
Post #50





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

Ostrzeżenie: (0%)
-----


tak masz racje nie mam session_start()


a co z tym 1 wolnym uruchomieniem
Go to the top of the page
+Quote Post
nospor
post
Post #51





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
acztery
post
Post #52





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post
Post #53





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
acztery
post
Post #54





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

Ostrzeżenie: (0%)
-----


wypas super robota
Go to the top of the page
+Quote Post
nospor
post
Post #55





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/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=dw...f1b1913f5cf5dee
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.
Go to the top of the page
+Quote Post
bigZbig
post
Post #56





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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:
  • 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.
W kazdym razie to, co robi metoda _createLink jet moim zdaniem praca dla dwoch zewnetrznych, wyspecjalizowanych klas (router i view).
Go to the top of the page
+Quote Post
nospor
post
Post #57





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Dzieki za uwagi.
Go to the top of the page
+Quote Post
bigZbig
post
Post #58





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nasty
post
Post #59





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post
Post #60





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




@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
Go to the top of the page
+Quote Post
AxZx
post
Post #61





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


kiedy mozna (czy wogole mozna) spodziewac sie tej klasy dla php 4?
Go to the top of the page
+Quote Post
nospor
post
Post #62





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
hugonot
post
Post #63





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 12.08.2006

Ostrzeżenie: (0%)
-----


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...) (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Co mam zrobic? Pomocy!!!
Joanna
Go to the top of the page
+Quote Post
nospor
post
Post #64





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

edit: widze ze topic juz zalozylas. Posta ponizej wiec usuwam
Go to the top of the page
+Quote Post
AxZx
post
Post #65





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
nospor
post
Post #66





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




@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.
Go to the top of the page
+Quote Post
AxZx
post
Post #67





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post
Post #68





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




@AxZx z racji ze szerzych po różnych topicach nieprawdziwe plotki to pisze tutaj (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
nasty
post
Post #69





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ) link co wyglada tak: "java script:doNavigateToPage(<page-id>);".

Mysle ze zalapiesz o co mi chodzi.
Pozdrawiam
Go to the top of the page
+Quote Post
AxZx
post
Post #70





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


chyba chodzi ci o to samo o co mnie:)
balon wlasnie cos takiego zrobil w swojej klasie
Go to the top of the page
+Quote Post
nospor
post
Post #71





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




co za lenie.... (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Dobra, leniwy klient nasz Pan. Sie dorobi. To zaden problem.
Go to the top of the page
+Quote Post
bigZbig
post
Post #72





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


@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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) o tyle propozycja nasty_psycho bardziej przyjazna dla uzytkownika.
Go to the top of the page
+Quote Post
nospor
post
Post #73





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




@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 (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
AxZx
post
Post #74





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #75





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
nasty
post
Post #76





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


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).
Go to the top of the page
+Quote Post
bigZbig
post
Post #77





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


@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.
Go to the top of the page
+Quote Post
AxZx
post
Post #78





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


gdzie mozna nauczyc sie takiego fachu ?(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nasty
post
Post #79





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


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 ( (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) oko za oko ~nospor (IMG:http://forum.php.pl/style_emoticons/default/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 ? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)


O co ci chodzi ? bo nie bardzo lapie ? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)







Pozdrawiam
Go to the top of the page
+Quote Post
Lee
post
Post #80





Grupa: Zarejestrowani
Postów: 319
Pomógł: 0
Dołączył: 11.04.2006
Skąd: Chojnów

Ostrzeżenie: (0%)
-----


Nie mam zielonego pojęcia jak to ze smarty połączyć (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/worriedsmiley.gif)
Go to the top of the page
+Quote Post
AxZx
post
Post #81





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


Cytat(nasty_psycho @ 24.08.2006, 15:02 ) *
O co ci chodzi ? bo nie bardzo lapie ? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)


o to :

Cytat(bigZbig @ 24.08.2006, 09:34 ) *
Trzeba jedynie rozumiec idee OOP i umiec pisac do interfejsu.
Go to the top of the page
+Quote Post
nospor
post
Post #82





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
Lee
post
Post #83





Grupa: Zarejestrowani
Postów: 319
Pomógł: 0
Dołączył: 11.04.2006
Skąd: Chojnów

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
nospor
post
Post #84





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
Lee
post
Post #85





Grupa: Zarejestrowani
Postów: 319
Pomógł: 0
Dołączył: 11.04.2006
Skąd: Chojnów

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
AxZx
post
Post #86





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


3 parametr metody render
Go to the top of the page
+Quote Post
Lee
post
Post #87





Grupa: Zarejestrowani
Postów: 319
Pomógł: 0
Dołączył: 11.04.2006
Skąd: Chojnów

Ostrzeżenie: (0%)
-----


No to teraz kompletnie nic nie rozumiem (IMG:http://forum.php.pl/style_emoticons/default/sleep.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #88





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




@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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Przejrzyj przyklady co są zalączone.

Specjalnie dla Ciebie kod pod Smarty:
  1. <?php
  2. require_once('Pager.class.php');
  3. $sql = 'select count(*) from TABLE';
  4. $result = mysql_query($sql);
  5. $row = mysql_fetch_array($result);
  6. $recordsCount = $row[0];//pobranie liczby rekordów
  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. echo $e->getMessage();
  16. }
  17.  
  18. //zapytanie z uwzglenieniem stronicowania
  19. $sql = 'select * from TABLE limit '.$start.','.($end - $start + 1);
  20. //...pobranie wyników i ich wyswietlenie
  21.  
  22. //tu gdzies tworzysz sobie smarty
  23.  
  24. //przypisanie do smarty
  25. $smarty->assign('pager', $pag);
  26. ?>


kod smarty:
Kod
{$pager}


Oczywiscie rekordy tez mozesz przypisac do smartiego, ale nie musisz (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Lee
post
Post #89





Grupa: Zarejestrowani
Postów: 319
Pomógł: 0
Dołączył: 11.04.2006
Skąd: Chojnów

Ostrzeżenie: (0%)
-----


Nie obraziłem się, bo sam stwierdzam że jestem tępy (IMG:http://forum.php.pl/style_emoticons/default/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 = mysql_query($sql);
  5. $row = 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. echo $e->getMessage();
  16. }
  17.  
  18. $sql = 'select * from '.$tbl_guestbook.' limit '.$start.','.($end - $start + 1);
  19. $query = mysql_query($sql);
  20. while ($result = 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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
nospor
post
Post #90





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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" (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

edit: a juz wiem. robisz $row[] =....
ale wczesniej $row ma pewne dane. Musisz przed petla zresetowac $row:
  1. <?php
  2. //.....
  3. $row = array();
  4. while ($result = mysql_fetch_assoc($query)){
  5. $row[] = $result;
  6. }
  7. //.....
  8. ?>
Go to the top of the page
+Quote Post
Lee
post
Post #91





Grupa: Zarejestrowani
Postów: 319
Pomógł: 0
Dołączył: 11.04.2006
Skąd: Chojnów

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
tomick_pl
post
Post #92





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 16.09.2006

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

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

Ten post edytował tomick_pl 16.09.2006, 11:59:05
Go to the top of the page
+Quote Post
AxZx
post
Post #93





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


tez to zauwazylem, ale gdy przeskoczysz na 27 ktorej nie ma to i tak wyswietli sie ostatnia strona 25.
Go to the top of the page
+Quote Post
tomick_pl
post
Post #94





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 16.09.2006

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Poza tym raczej taki zabieg nie wpłynie na szybkość skryptu- a i ładniej wygląda (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ale tak to klasa ok (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #95





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Dzieki za wykrycie buga (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
tomkoz11
post
Post #96





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 16.03.2006

Ostrzeżenie: (0%)
-----


Świetna klasa nospor! Wielkie dzięki - działa o wiele szybciej od mojego dotychczasowego sposobu stronnicowania. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Pozdrawiam

Ten post edytował tomkoz11 18.11.2006, 09:54:50
Go to the top of the page
+Quote Post
czerwony2
post
Post #97





Grupa: Zarejestrowani
Postów: 12
Pomógł: 1
Dołączył: 29.11.2006

Ostrzeżenie: (0%)
-----


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?(IMG:http://forum.php.pl/style_emoticons/default/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. (IMG:http://forum.php.pl/style_emoticons/default/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).
Go to the top of the page
+Quote Post
nospor
post
Post #98





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Widze ze korzystasz ze starej wersji, 1.0, bo w wyzszych juz konstruktor nie ma 3 parametrow (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
czerwony2
post
Post #99





Grupa: Zarejestrowani
Postów: 12
Pomógł: 1
Dołączył: 29.11.2006

Ostrzeżenie: (0%)
-----


OK trochę posiedziałem, ale udało mi się zrobić to co chciałem - uczymy się na błędach (IMG:http://forum.php.pl/style_emoticons/default/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

Ten post edytował czerwony2 30.12.2006, 03:41:52
Go to the top of the page
+Quote Post
nospor
post
Post #100





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

12 Stron V   1 2 3 > » 
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.12.2025 - 18:47