![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Moderatorzy Postów: 36 557 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:
Polączenie pagera z pobieraniem rekordów z bazy:
(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:
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:
- 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 |
|
|
![]() |
![]()
Post
#81
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) ![]() ![]() |
O co ci chodzi ? bo nie bardzo lapie ? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) o to : Trzeba jedynie rozumiec idee OOP i umiec pisac do interfejsu.
|
|
|
![]()
Post
#82
|
|
Grupa: Moderatorzy Postów: 36 557 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
|
|
|
![]()
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 ? |
|
|
![]()
Post
#84
|
|
Grupa: Moderatorzy Postów: 36 557 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
|
|
|
![]()
Post
#85
|
|
Grupa: Zarejestrowani Postów: 319 Pomógł: 0 Dołączył: 11.04.2006 Skąd: Chojnów Ostrzeżenie: (0%) ![]() ![]() |
Trzeci parametr ?
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)
|
|
|
![]()
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
|
|
|
![]()
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)
|
|
|
![]()
Post
#88
|
|
Grupa: Moderatorzy Postów: 36 557 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:
kod smarty: Kod {$pager} Oczywiscie rekordy tez mozesz przypisac do smartiego, ale nie musisz (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]()
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
a wywołuje go tak
tak wiem tępy jestem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#90
|
|
Grupa: Moderatorzy Postów: 36 557 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
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:
|
|
|
![]()
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) |
|
|
![]()
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:
na:
oraz to:
na:
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 |
|
|
![]()
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.
|
|
|
![]()
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)
|
|
|
![]()
Post
#95
|
|
Grupa: Moderatorzy Postów: 36 557 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. |
|
|
![]()
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 |
|
|
![]()
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ąć??
Mój problem polega na tym że po przekazaniu do klasy liczby rekordów na stronie jaką ma wyświetlać za pomocą:
(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). |
|
|
![]()
Post
#98
|
|
Grupa: Moderatorzy Postów: 36 557 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: tak sie nie wstawia zmiennych '$ile', powiino byc:
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)
|
|
|
![]()
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 |
|
|
![]()
Post
#100
|
|
Grupa: Moderatorzy Postów: 36 557 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)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 31.08.2025 - 22:55 |