Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pager - stronnicowanie, Obsluga dowolnych linkow
Balon
post 29.04.2006, 18:07:14
Post #1





Grupa: Zarejestrowani
Postów: 422
Pomógł: 0
Dołączył: 14.12.2005
Skąd: Wałbrzych

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


Klasa nie jest taka świetna jak tak klasa nospora ale kiedys moze mu dorownam winksmiley.jpg zauwazylem ze ludzie pisza o problemie z mod rewrite i roznymi linkami, tak wiec pomyslalem ze do skryptu ktory aktualnie pisze dodam klase z pagerem o walsnie takiej mozliwosci winksmiley.jpg

  1. <?php
  2. /**
  3.  * Klasa pagera
  4.  * 
  5.  * @author Krzysztof 'Balon' Jagiełło < balonyo@gmail.com >
  6.  * 
  7.  * ( pager::text['separ'] - separator odzdzielajacy linki do stron )
  8.  * ( pager::url - sposob wyswietlania urli )
  9.  *
  10.  */
  11. class pager
  12. {
  13. var $ileMax = 10; # ileMax na strone
  14. var $actPage; # aktualna strona
  15. var $ilePages; # ile stron (wynik pager::ileStron)
  16. var $pagerMax = 3;
  17. var $text = array( 'PREV' => '<< Poprzednia ::', 'NEXT' => ':: Następna >>', 'T_PREV' => 'Poprzednia strona', 'T_NEXT' => 'Następna strona', 'SEPAR' => ' ', 'ZILU' => 'z % stron' );
  18. var $url = '<a href="linki.php?p=%">%</a>';
  19. var $link;
  20.  
  21. /**
  22.  * Konstruktor klasy
  23.  *
  24.  * @param integer $actPage aktualny numer strony
  25.  */
  26. function pager( $actPage, $num, $limit = 10 )
  27. {
  28. $this->actPage = $actPage;
  29. $this->ilePages = $this->ileStron( $num );
  30. $this->ileMax = $limit;
  31. }
  32. /**
  33.  * Pager
  34.  *
  35.  */
  36. function showPager()
  37. {
  38. $this->prev();
  39. $this->addSep();
  40. for( $i = ( $this->actPage / $this->ileMax ) - $this->pagerMax; $i <= ( $this->actPage / $this->ileMax ) + $this->pagerMax; $i++ )
  41. {
  42. if( $i >= 0 && $i < $this->ilePages )
  43. {
  44. $this->page( $i );
  45. $this->addSep();
  46. }
  47. }
  48. $this->addzIlu( $this->ilePages );
  49. $this->next();
  50. return $this->link;
  51. }
  52. /**
  53.  * Poprzednia strona
  54.  *
  55.  */
  56. function prev()
  57. {
  58. if( ( $this->actPage / $this->ileMax ) == 0 )
  59. {
  60. $this->link = $this->text['PREV'];
  61. }
  62. else 
  63. {
  64. $this->link = $this->url( $this->actPage / $this->ileMax, '', 'minus' );
  65. }
  66. }
  67. /**
  68.  * Nastepna strona
  69.  *
  70.  */
  71. function next()
  72. {
  73. if( $this->actPage < ( ( $this->ilePages * $this->ileMax ) - $this->ileMax ) )
  74. {
  75. $this->link .= $this->url( $this->actPage / $this->ileMax, '', 'plus' );
  76. }
  77. else 
  78. {
  79. $this->link .= $this->text['NEXT'];
  80. }
  81. }
  82. /**
  83.  * wyswietlanie linku do strony
  84.  *
  85.  * @param integer $i numer strony
  86.  */
  87. function page( $i )
  88. {
  89. if( $this->actPage == $i * $this->ileMax )
  90. {
  91. $this->link .= $this->url( $i , 't' );
  92. }
  93. else 
  94. {
  95. $this->link .= $this->url( $i );
  96. }
  97. }
  98. /**
  99.  * Obliczanie ilosci stron
  100.  *
  101.  * @param integer $num liczba wpisow(mysql_num_rows)
  102.  * @return $ilePages
  103.  */
  104. function ileStron( $num )
  105. {
  106. return ceil( $num / $this->ileMax );
  107. }
  108.  
  109. /**
  110.  * Tworzenie urli, do $this->link podajemy juz <a href="(...)
  111.  * a miejsce na numer strony oznaczamy jako %
  112.  *
  113.  * @param integer $i
  114.  * @param string $bold
  115.  * @return $link
  116.  */
  117. function url( $i, $bold = null, $mod = null )
  118. {
  119. if( $mod == null )
  120. {
  121. if( $bold == 't' )
  122. {
  123. $link = str_replace( '>%<', '><b>'.( $i + 1 ).'</b><', $this->url );
  124. $link = str_replace( '%', $i * $this->ileMax, $link );
  125. }
  126. else 
  127. {
  128. $link = str_replace( '>%<', '>'.( $i + 1 ).'<', $this->url );
  129. $link = str_replace( '%', $i * $this->ileMax, $link );
  130. }
  131. }
  132. else 
  133. {
  134. if( $mod == 'plus' )
  135. {
  136. $link = str_replace( '>%<', ' title="'.$this->text['T_NEXT'].'">'.$this->text['NEXT'].'<', $this->url );
  137. $link = str_replace( '%', ( $i * $this->ileMax ) + $this->ileMax, $link );
  138. }
  139. else if( $mod == 'minus' )
  140. {
  141. $link = str_replace( '>%<', ' title="'.$this->text['T_PREV'].'">'.$this->text['PREV'].'<', $this->url );
  142. $link = str_replace( '%', ( $i * $this->ileMax ) - $this->ileMax, $link );
  143. }
  144. }
  145. return $link;
  146. }
  147. /**
  148.  * Dodawanie separatora
  149.  *
  150.  */
  151. function addSep()
  152. {
  153. $this->link .= $this->text['SEPAR'];
  154. }
  155. /**
  156.  * " (...) ze 100 "
  157.  */
  158. function addzIlu( $i )
  159. {
  160. $this->link .= str_replace( '%', $i, $this->text['ZILU'] );
  161. $this->addSep();
  162. }
  163. }
  164. ?>


Przyklad uzycia

  1. <?php
  2. if( isset( $_GET['p'] ) && is_numeric( $_GET['p'] ) )
  3. {
  4. $p = $_GET['p'];
  5. }
  6. else 
  7. {
  8. $p = 0;
  9. }
  10.  
  11. $sql->sql_query( 'SELECT id FROM LINKS WHERE zatw = "tak"' );
  12. $num = $sql->sql_num_rows();
  13.  
  14. $pager = new pager( $p, $num );
  15.  
  16. echo $pager->showPager();
  17. ?>


pozdrawiam

ZEZWALAM NA WSZELKI UZYTEK wiem ze klasa porazkowa, ale to byla klasa na poczatku mojej przygody z php. teraz napisze cos lepszego winksmiley.jpg

Ten post edytował Balon 21.08.2006, 18:58:31


--------------------
Postura wielka i morda wredna, jestem Balon, kozak z osiedla !
bzdury.pl - Królestwo rozrywki
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
AxZx
post 21.08.2006, 11:21:01
Post #2





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

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


bardzo mi sie podoba to ze mozna swodobnie podac adres strony na ktora ma przekierowywac

mam kilka propozycji;)

gdyby kod

  1. <?php
  2. if( isset( $_GET['page'] ) && is_numeric( $_GET['page'] ) ){
  3. $p = $_GET['page'];
  4. }else {
  5. $p = 0;
  6. }
  7. ?>


wrzucic do klasy to byloby lepiej, mozna dac mozliwosc podania skad klasa ma brac info ktora podstrona jest aktualnie wyswietlana
  1. <?php
  2. //np
  3. $pager->setPage = $_GET['page']
  4. //albo
  5. $pager->setPage = $_POST['page']
  6. ?>


mozna by dac jeszcze mozliwosc ustawienia ile linkow ma byc wyswietlanych

a gdzie jest metoda ktora wyrzuca LIMIT do zapytania SQL ?

a gdyby tak zrobic metody dzieki ktorym mozna ustawic wszystkie parametry?
np ilosc wszystkich wierszy w bazie, ilosc wyswietlanych wierszy na jednej podstronie
zamiast podawac to w argumentach metody pager


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
Seth
post 21.08.2006, 12:11:06
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


Cytat
NIE ZEZWALAM NA UZYTEK KOMERCYJNY

Cool, ale po co w takim razie to tutaj dajesz?
Dla zabawy, szpanu... ?
Go to the top of the page
+Quote Post
Marusz
post 21.08.2006, 12:40:02
Post #4





Grupa: Zarejestrowani
Postów: 191
Pomógł: 0
Dołączył: 16.05.2003
Skąd: POLAND

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


Cytat
NIE ZEZWALAM NA UZYTEK KOMERCYJNY

Klasa posiada bledy. Poza tym nospor zaproponowal lepsze rozwiazanie i opatrzyl ludzka licencja. Jesli chcesz mu kiedys dorownac, to na poczatku zmien mentalnosc...


--------------------
Go to the top of the page
+Quote Post
AxZx
post 21.08.2006, 13:35:05
Post #5





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

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


nospor moze zrobil lepsza klase ale nie ma tak fajnej funkcjonalnosci jak ta smile.gif
mozna ustawiac wlasny adres
Balon troche przerobi klase i bedzie cacy:)

No przeciez u mnie tez mozna ustawic wlasny link.... /~nospor/


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
sf
post 21.08.2006, 13:45:11
Post #6





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

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


Cytat(Seth @ 21.08.2006, 13:11 ) *
Cool, ale po co w takim razie to tutaj dajesz?
Dla zabawy, szpanu... ?


Bo ma na to ochotę, jego sprawa na jakiej zasadzie udostępnia skrypt.

Co do skryptu... to beznadziejny jak każdy inny podany tutaj jak chodzi o stronicowanie. IMO kod klasy powinien być niezależny od HTML.


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
nasty
post 21.08.2006, 18:25:07
Post #7





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

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


Cytat
NIE ZEZWALAM NA UZYTEK KOMERCYJNY

ok, a masz jakis powod? czy poprostu cierpisz na syndrom zbuntowanego 15 latka walczacego z M$ i ratujacym Open-Source winksmiley.jpg niema sensu, daj na GNU/GPL i bedzie gitara.

a klasa jako klasa, nic specjalnego
pozdrawiam
Go to the top of the page
+Quote Post
Balon
post 21.08.2006, 18:57:37
Post #8





Grupa: Zarejestrowani
Postów: 422
Pomógł: 0
Dołączył: 14.12.2005
Skąd: Wałbrzych

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


spadac od mojego wieku winksmiley.jpg oczywiscie zezwalam na uzytek do jakichkolwiek celow. napisalem to tak bo mialem problemy z kradzieza skryptow w ktorych wykorzystywana byla ta klasa i musialem miec jakis argument. klase mam zamiar od nowa odpisac winksmiley.jpg

pzodrawiam


--------------------
Postura wielka i morda wredna, jestem Balon, kozak z osiedla !
bzdury.pl - Królestwo rozrywki
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 10:09