Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pager (stronicowanie)
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Stron: 1, 2, 3, 4, 5
nospor
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.
acztery
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
nospor
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
acztery
wypas super robota
nospor
Dawno nic nie pisalem. Czas zmienic. A wiec jest wersja 2.0
Główne zmiany:
1) odejscie od przesylania pagera formularzem
2) zapisywanie Pagera do tablicy, z której mozna samemu wygenerowac kod html Pager'a
3) PLucie wyjatkami smile.gif
4) no i obecna wersja jest pod php5. Niedlugo dorobie tez wersje pod php4.

Zapraszam do sciagania i testowania:
http://nospor.vis-maior.net/index.php?m=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.
bigZbig
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).
nospor
Cytat
Moim zdaniem dane niezbedne do pracy pagera powinny byc przekazywane do konstruktora (np. w postaci tablicy config).
W zasadzie to tylko liczba rekordow jest potrzebna. Faktycznie moze byc w konstruktorze.

Cytat
Tym samym wzorcem moznaby sie posluzyc w warstwie wizualnej przy konstruowaniu wiggetow. Kazda taka klasa wizualizujaca pagera mialaby przykladowo metode renderPagerBar ktora zwracalaby gotowy kod html pagera. Oczywiscie pozostawilbym tez metody dajace dostep bezposredni do danych "surowych" wygenerowanych przez pegera umozliwiajacych wspolprace danej klasy z systememi szablonow. Za dane surowe rozumiem tu:
liczbe stron,
liczbe elementow na stronie,
indeks poczatkowy,
indeks koncowy,
tablice odsylaczy do kolejnych stron,
komplet odsylaczy: do przodu, do tylu, na poczatek, na koniec itd.
NIe wiem czy cie dobrze zrozumialem, ale to wszystko teraz przeciez jest. Kazdy moze napisac sobie wlasna klase dziedziczącą po Pager i napisac wlasna metode do generowania html, kazdy moze napisac metode zewnetrzną i zapodac ja do Pagera. kazda z tych metod dostaje wlasnie surowe dane w postaci tablicy

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

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

Co do nice urls to bede musial z czasem sie przyjrzec temu smile.gif
Dzieki za uwagi.
bigZbig
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.
nasty
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.
nospor
@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
AxZx
kiedy mozna (czy wogole mozna) spodziewac sie tej klasy dla php 4?
nospor
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.
hugonot
Mam problem, uzylam kodu tak jak w przykladzie, wszystko dziala ale tylko jesli biore wszystkie rekordy z bazy, jesli wstawie wczesniej forme pytaniem i przekaze zmienna do wyszukiwania przez post to na 1 stronie jest OK, a na kolejnych zmienna ograniczajaca wyszukiwanie jest kasowana (ilosc stron sie zmienia automatycznie i mam wszystkie rekordy z bazy...) sad.gif
Co mam zrobic? Pomocy!!!
Joanna
nospor
Problem jako taki nie jest związany z moją klasą.
Dzieje sie tak, gdyz przechadząc do nastepnej strony, tracone sa dane z posta z poprzedniego żadania.

Rozwiązanie:
gdy wyslesz formularz, zapisz jego wynik (w sensie pol jakie przeslalas) do sesji. Nastepnym razem sprawdzaj czy wyslano formularz. Jesli nie wyslano, pobieraj dane wyszukiwania z sesji. Jesli znowu wyslano formularz, nadpisz dane w sesji.

Jesli nadal nie wiesz jak to zrobic, zaloz topic w dziale php. Twoj problem jak pisalem nie jest związany z moją klasą a z logiką Twojej aplikacji.

edit po poscie nizej:
zaloz topic w dziale php i tam opisz sprawe. Nie wykluczone ze sie tam odezwe. chodzi oto, by tu nie zasmiecac topicu smile.gif

edit: widze ze topic juz zalozylas. Posta ponizej wiec usuwam
AxZx
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?
nospor
@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.
AxZx
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
nospor
@AxZx z racji ze szerzych po różnych topicach nieprawdziwe plotki to pisze tutaj tongue.gif
U mnie tez mozesz ustawic sobie jak ma wygladac link. W wersji 2.0 mozesz albo dziedziczyc po klasie, albo do klasy zapodac funkcje, ktora generuje Pager i tym samym, ktora generuje linki.

Zczytywanie strony skad chcesz tez nie jest problemem. Zczytujesz sobie strone sam, a potem wywolujesz metody klasy: SetActualPage()

I juz wszystko jest.
nasty
nospor: a co ty powiesz na taki pomysl (moze w wersji 2.1?), ze masz w klasie zmienna co wyglada tak: /path_costam<page_id>_<cos_tam_innego>, i regexami bedziesz ustalal jak ma wygladac link, mysle ze nie kazdemu bedzie sie chcialo dziedziczyc klase i sie za duzo bawic.

Ja to jak juz tu wspomnialem, musialem sobie zrobic (i zrobilem winksmiley.jpg) link co wyglada tak: "java script:doNavigateToPage(<page-id>);".

Mysle ze zalapiesz o co mi chodzi.
Pozdrawiam
AxZx
chyba chodzi ci o to samo o co mnie:)
balon wlasnie cos takiego zrobil w swojej klasie
nospor
co za lenie.... tongue.gif

Dobra, leniwy klient nasz Pan. Sie dorobi. To zaden problem.
bigZbig
@nospor jak widzisz problem wizualizacji linkow powraca. Ja we wczesniejszej wypowiedzi zaproponowalem zaprzegniecie do tego celu wzorca strategii tzn. proces generowania linka wyrzucic do osobnej wyspecjalizowanej klasy, nasty_psycho proponuje uzycie wyrazen regularnych. O ile moja propozycja wydaje mie sie bardziej profesjonalna winksmiley.jpg o tyle propozycja nasty_psycho bardziej przyjazna dla uzytkownika.
nospor
@bigZbig jak tak sie dluzej nad tym zastanawiam to faktycznie to ma sens. Chyba pojde na "kompromis": zrobie i tak i tak. czyli po nasty_psychowemu i po Twojemu winksmiley.jpg

Dodatkowo po Twojemu to mysle by dorobic w interfejsie metode do pobierania numeru aktualnej strony. Skoro ktos buduje wlasny link, to i pewnie w specyficzny sposob bedzie pobieral ten numer

edit:
No to jest wersja 2.01
Zmiany:
- dorobilem na szybko ten link. teraz w konstruktorze, jesli podamy drugi parametr i bedzie w nim ciag:
#PAGE# to link ten zostanie niezmieniony, czyli bedzie tak jak user podal, za wyjatkiem #PAGE#, ktore zostanie zamienione na numer strony
Czyli dla przykladu co podal AxZx powinno byc:
  1. <?php
  2. $pager = new Pager('idPagera', 'wszystkie_numery_#PAGE#');
  3. ?>


- metoda Render moze zwracac teraz tablicę pagera zamiast kodu html. Należy ustawic na true jej trzeci parametr
AxZx
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. ?>
nospor
No ale teraz to ustawiasz w konstruktorze. Co za roznica czy w metodzie oddzielnej czy od razu? Tak mialem od wersji 1.0 i tak zostalo winksmiley.jpg
nasty
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).
bigZbig
@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.
AxZx
gdzie mozna nauczyc sie takiego fachu ?smile.gif
nasty
Cytat(bigZbig @ 24.08.2006, 11:34 ) *
@nasty_psycho - wzorzec strategi jest bardzo latwy do realizacji i osobiscie nie uwazam, aby oplacalnosc jego stosowania rezerwowac jedynie dla bardzo skomplikowanych mechanizmow. Trzeba jedynie rozumiec idee OOP i umiec pisac do interfejsu.


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



Cytat
gdzie mozna nauczyc sie takiego fachu ? smile.gif


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







Pozdrawiam
Lee
Nie mam zielonego pojęcia jak to ze smarty połączyć sadsmiley02.gif i wogóle jak to działa, przeczytałem dwie strony i pod kilkoma odnośnikami byłem ale nie mogę tego ugryźć :| W ogóle nie kapuje stronicowania worriedsmiley.gif
AxZx
Cytat(nasty_psycho @ 24.08.2006, 15:02 ) *
O co ci chodzi ? bo nie bardzo lapie ? tongue.gif


o to :

Cytat(bigZbig @ 24.08.2006, 09:34 ) *
Trzeba jedynie rozumiec idee OOP i umiec pisac do interfejsu.
nospor
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
Lee
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 ?
nospor
Cytat
ale nie wiem jak to napisac
Nie wiesz jak napisac od poczatku, czy jak wykorzystac moją klase? Jak to drugie to przyklady przeciez podalem winksmiley.jpg

Cytat
ale co z tymi plikami które trzeba zaincludować ? tylko Pager.class.php czy wszystkie ?
Tylko Pager.class.php. Reszta plikow to przyklady jak uzywac
Lee
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. ?>
AxZx
3 parametr metody render
Lee
No to teraz kompletnie nic nie rozumiem sleep.gif
nospor
@Lee chlopie, olej tablice, bo dla dziebie to za wysoki poziom abstrakcji. Nie chce cie tym obrazic ino dac do zrozumienia bys narazie tablice olal winksmiley.jpg

Przejrzyj przyklady co są zalączone.

Specjalnie dla Ciebie kod pod Smarty:
  1. <?php
  2. 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 winksmiley.jpg
Lee
Nie obraziłem się, bo sam stwierdzam że jestem tępy winksmiley.jpg "Przerobiłem" ten kod co podałes, ale trochu koślawo, bo mam 8 wpisów w bazie danych i ustawiłem sobie ze ma mi wyswietlać 4 ale to wyświetla mi tak
8 wpis | 8 wpis
8 wpis | 8 wpis
1 wpis | 5 wpis
2 wpis | 6 wpis
3 wpis | 7 wpis
4 wpis | 8 wpis
Kreska | oznacza, po przełączeniu na następną strone
kod wygląda tak
  1. <?php
  2. require_once('Pager.class.php');
  3. $sql = 'select count(*) from '.$tbl_guestbook.'';
  4. $result = 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 winksmiley.jpg
nospor
Cytat
ustawiłem sobie ze ma mi wyswietlać 4 ale to wyświetla mi tak
W kodzie co pokazales nie widze by tak bylo. BRakuje SetRecordsPerPage
  1. <?php
  2. //....
  3. $pager->SetRecordsPerPage(4);
  4. $pag = $pager->Render(true);
  5. //.....
  6. ?>


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


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

edit: a juz wiem. robisz $row[] =....
ale wczesniej $row ma pewne dane. Musisz przed petla zresetowac $row:
  1. <?php
  2. //.....
  3. $row = array();
  4. while ($result = mysql_fetch_assoc($query)){
  5. $row[] = $result;
  6. }
  7. //.....
  8. ?>
Lee
No fakt jest row, ale przed chwilą miałem wysłac do Ciebie PW że już rozwiązałem. Jednak ja to rozwiązałem zmieniając $row[] as $entry[]

Dzięki za fatygę Pozdrawiam smile.gif
tomick_pl
Hmmm... zauważyłem złe generowanie linków odpowiedzialnych za przeskoczenie o X stron. Swoje twierdzenie opieram na przykładzie ex_with_array dołączonym do paczki z klasą. Otóż: na stronie 4 jest dostępny link przeskoczenia do tyłu o.... 5 pozycji... czyli do strony "-1" tak samo się dzieje jak na stronie 22 możemy przejść do strony 27 (a jest tylko 25 smile.gif ). Ja to sobie tak naprawiłem zmieniając kilka linijek metody _toArray:

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


na:

  1. <?php
  2. if ($this->_indexPageStart > 1) {
  3. $this->_array[self::_GOTO_FIRST_] = 1;
  4.  #$this->_array[self::_GOTO_PREV_X_] = $this->_actualPage - $this->_pagesPerNav;
  5. }
  6. if ($this->_actualPage > 5) { // link pojawiał się już na stronie 4 (4-5=-1) na stronie 5 też go nie powinno być (5-5=0) - czyli powinien być na stronach 6 i większych
  7. $this->_array[self::_GOTO_PREV_X_] = $this->_actualPage - $this->_pagesPerNav;
  8. }
  9. ?>


oraz to:

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


na:

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


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

EDIT:
Poprawiłem ostatni kod w tym poście- nie działał tak, jak chciałem
AxZx
tez to zauwazylem, ale gdy przeskoczysz na 27 ktorej nie ma to i tak wyswietli sie ostatnia strona 25.
tomick_pl
No tak, ale ja nie lubię takich małych bugów- faktycznie wyświetli się ostatnia (lub pierwsza) strona, ale zawsze jakoś tak drażni smile.gif Poza tym raczej taki zabieg nie wpłynie na szybkość skryptu- a i ładniej wygląda smile.gif Ale tak to klasa ok smile.gif
nospor
Dzieki za wykrycie buga smile.gif
Po prostu link o x do tylu, gdy stron jest mniej niz x, nie powinien sie wogle pojawiac. Moje niedopatrzenie (musialem w wersji 2.0 to jakos skaszanic, bo w 1.0 bylo raczej ok). W poniedzialek to poprawie, gdyz teraz siedze przy kompie bez php.

Ale jak zauwazyliscie, wyswietli sie prawilowa strona. Jest to zabezpieczenie, jakby ktos z palca wpisal zla strone smile.gif

edit:
ok, to jest poprawka. znajduje sie w pakiecie v2.02.
Bug dotyczyl tylko sytuacji, gdy ustawiony byl "smart" Render, czyli ze aktualna strona byla po srodku. W normalnym renderowaniu bylo ok.
tomkoz11
Świetna klasa nospor! Wielkie dzięki - działa o wiele szybciej od mojego dotychczasowego sposobu stronnicowania. smile.gif
Pozdrawiam
czerwony2
Mam pytanie:
Jak powinien wyglądać prawidłowo konstruktor dla klasy która korzysta do przechodzenia do kolejnych stron z zewnętrznego formularza . Nospor pisze w pierwszym poscie że trzeba podać pierwszy i trzeci argument. Rozumiem ze w pierwszym ma być unikalne idPagera, w trzecim idFormularza (czyli np $ile) a co mam w takim razie wpisać w drugim, bo przecież nie można go ominąć??

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



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

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


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

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

Jak to powinno wygadać??


Motam się z tym pagerem od paru dni i już się gubię w tym wszystkim (dodam jeszcze ze jestem początkujący).
nospor
Widze ze korzystasz ze starej wersji, 1.0, bo w wyzszych juz konstruktor nie ma 3 parametrow smile.gif
Cytat
a co mam w takim razie wpisać w drugim, bo przecież nie można go ominąć??
wartosc domyslna, czyli ''. a najlepiej przejdz na wersje nr 2 i przejrzyj dołączone do niej przyklady.

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

i czemu u ciebie nazwa forma jest zmienna?

Cytat
dodam jeszcze ze jestem początkujący
Tego nie musiales dodawac winksmiley.jpg
czerwony2
OK trochę posiedziałem, ale udało mi się zrobić to co chciałem - uczymy się na błędach winksmiley.jpg

Nieśmiało wydaje mi się że znalazłem małą skazę wizualną tzn. o jeden za dużo separator ($sep) między ostatnim indeksem numerycznym a > (Następna strona) co powoduje większą przerwę niż między innymi indeksami pegera. W kodzie jest to linia 382 dla PHP4 wersji pegera v2.02 i 405 dla PHP5.

Pozdrawiam
nospor
Cytat
Nieśmiało wydaje mi się że znalazłem małą skazę wizualną tzn. o jeden za dużo separator ($sep) między ostatnim indeksem numerycznym a > (Następna strona)
A faktycznie. Dzieki za cynk smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.