![]() |
![]() |
![]()
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 ![]() 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 ![]() 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 ![]()
Mam nadzieję, że w ten sposób usatysfakcjonowałem parę osób ![]() 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 ![]() 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 -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() |
![]()
Post
#2
|
|
![]() 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 -------------------- bigZbig (Zbigniew Heintze) | blog.heintze.pl
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 25.06.2025 - 01:12 |