Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> tworzenie ładnych numerków po stronicowaniu :P, [funkcja] np 1 2 3...7 8 9...14 15 16
Apo
post 12.01.2006, 15:16:36
Post #1





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


Witam
Nie wiem jak sie nazywa takie coś jak podałem w opisie tamatu więc jest taki jak jest tongue.gif
Oto kod mojego dzieła:

  1. <?php
  2. function stronicowanie( $ile =0, $podstrona ) {
  3. /// $ile = ilość stron które zosały wygenerowany po stronicowaniu
  4. $page = (integer)$_GET['page'];
  5. if($ile <= 7)
  6. {
  7.     for($i=1; $i <= $ile; $i++)
  8.         {
  9.             if($i != $page)
  10.             {
  11.                 echo '<a href="index.php?id='.$podstrona.'&page='.$i.'">'.$i.' </a>';
  12.             }
  13.                 else
  14.                 { 
  15.                 echo '<font color="red">'.$i.' </font>'; 
  16.                 }
  17.         }
  18. }
  19. else
  20. {
  21.  
  22. ////////początek
  23.         if($page<4){ $g=4; } else { if($page>=5) { $g=2; } else { $g=1; } }
  24.         for($i=1; $i <= $g; $i++)
  25.         {
  26.             if($i != $page)
  27.             {
  28.                 echo '<a href="index.php?id='.$podstrona.'&page='.$i.'">'.$i.' </a>';
  29.             }
  30.                 else
  31.                 {
  32.                 echo '<font color="red">'.$i.' </font>'; 
  33.                 }
  34.         }
  35.         
  36. ////////srodek
  37.         if($page > 3 && $page < ($ile-4))
  38.         {
  39.         $c = ($page-1);
  40.         $d = ($page+1);
  41.         echo '...';
  42.         for($i=$c; $i <= $d; $i++)
  43.         {
  44.             if($i != $page)
  45.             {
  46.                 echo '<a href="index.php?id='.$podstrona.'&page='.$i.'">'.$i.' </a>';
  47.             }
  48.                 else
  49.                 {
  50.                 echo '<font color="red">'.$i.' </font>'; 
  51.                 }
  52.         }
  53.         }
  54.         
  55.         echo '...';
  56.         
  57. ////////koniec
  58.         if($page<($ile-4)){ $f=2; } else { if($page==($ile-4)) $f=5; else {$f=4; } }
  59.         for($i=($ile-$f); $i <= $ile; $i++)
  60.         {
  61.             if($i != $page)
  62.             {
  63.                 echo '<a href="index.php?id='.$podstrona.'&page='.$i.'">'.$i.' </a> ';
  64.             }
  65.                 else
  66.                 {
  67.                 echo '<font color="red">'.$i.' </font>'; 
  68.                 }
  69.         }
  70.  
  71. }
  72. }
  73. ?>

Jest to chyba bardzo czytalny kod więc łatwo sie w nim połapać.
Proszę o komentarze tongue.gif

Ten post edytował Apo 29.01.2006, 17:26:25
Go to the top of the page
+Quote Post
Birkoff
post 12.01.2006, 19:49:23
Post #2





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 23.10.2003
Skąd: Gdańsk

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


Calkiem ciekawe - i co najwazniejsze: DZIALA smile.gif

Ja bym tylko proponowal mala zmiane.
W tym rozwiazaniu niejako wymuszasz konstrukcje url'a - index.php?id=X&page=Y.

Ja proponuje zrobic to bardziej uniwersalnie - wprowadz drugi argument funkcji, ktory bedzie zawieral adres url (lub sam plik index.php na przyklad) - dzieki temu nie trzeba bedzie przerabiac calej funkcji zeby ja zastosowac w swojej stronie smile.gif

Ale ogolnie gratuluje koncepcji smile.gif

Pozdrawiam

Birkoff


--------------------
Webcoder
Go to the top of the page
+Quote Post
michal1991
post 24.01.2006, 18:06:31
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 24.01.2006
Skąd: Łęczna

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


Witam,
Mógłby mi ktoś powiedzieć jak to odpalić, bo ja nie wiem jak.


Pozdrawiam
Michał
Go to the top of the page
+Quote Post
ikioloak
post 24.01.2006, 19:27:23
Post #4





Grupa: Zarejestrowani
Postów: 416
Pomógł: 0
Dołączył: 8.01.2004

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


Uzywanie tego typu funkcji to wg mnie jest blad. Wszystko fajnie jak mamy jak w temacie 16 stron. Co jednak jesli stron jest 500? Lub wiecej? Ile sie wtedy naklikac trzeba? Juz takich kilka serwisow polskich widzialem, ktore opuszczalem wlasnie przez koniecznosc wielokrotnego klikania.
Go to the top of the page
+Quote Post
michal1991
post 25.01.2006, 07:56:37
Post #5





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 24.01.2006
Skąd: Łęczna

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


Cytat(ikioloak @ 2006-01-24 18:27:23)
Uzywanie tego typu funkcji to wg mnie jest blad. Wszystko fajnie jak mamy jak w temacie 16 stron. Co jednak jesli stron jest 500? Lub wiecej? Ile sie wtedy naklikac trzeba? Juz takich kilka serwisow polskich widzialem, ktore opuszczalem wlasnie przez koniecznosc wielokrotnego klikania.

To jaki według Ciebie sposób wyświetlania byłby najlepszy?
Go to the top of the page
+Quote Post
FiDO
post 25.01.2006, 16:56:28
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Wg mnie w miare optymalny jest sposob z IPB 2.1.x albo vBulletin 3.5.x. Wyglada podobnie jak na IPB tutaj.. czyli w okolo aktualnej strony sa ze 2-3 sasiednie (i pierwsza/ostatnia w miare potrzeby), a do tego przycisk, ktory ujawnia pole tekstowe, w ktore mozna wpisac numer strony i od razu nas na nia przenosi.


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
Athlan
post 27.01.2006, 19:16:36
Post #7





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


Dodatkowo pole tekstowe w DIV, który się ukrywa (na display:none)... no i w form na GET'a ustawić numerek strony, ja tak zrobiłem i wygląda ładnie smile.gif


--------------------
Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij pod postem.
Go to the top of the page
+Quote Post
Apo
post 28.01.2006, 17:32:26
Post #8





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


Cytat
w form na GET'a ustawić numerek strony, ja tak zrobiłem i wygląda ładnie

No a jak tu jest. Przeciaż zmienna $page to $_GET['page'], czyli jest z paska adresu brana laugh.gif
Go to the top of the page
+Quote Post
Athlan
post 29.01.2006, 16:20:13
Post #9





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


Chodziło mi o to, żeby po wpisaniu (numeru strony) w okienko do formularza przechodzimy w daną. Naucz się czytać @Apo


--------------------
Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij pod postem.
Go to the top of the page
+Quote Post
dr_bonzo
post 29.01.2006, 16:47:26
Post #10





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

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


Co mnie sie nie podoba (funkcjonalnosci nie sprawdzalem):

  1. <?php
  2. function stronicowanie( $podstrona ) {
  3. global $ile; // globalom mowimy stanowcze NIE :)
  4. $page = $_GET['page']; // quasi-global
  5.  
  6. ?>


Zrob ta funkcje zalezna TYLKO od jej argumentow: $iloscStron, $bierzacaStrona, $rozpietoscNumeracji, ...
$rozpietoscNumeracji -- ile stron (linkow do nich) w przod i w tyl ma byc wyswietlanych poczawszy od pierwszej, bierzacej i ostatniej, np
$rozpietoscNumeracji = 2:
1 2... (i-1) (i ) (i+1) ... (n-1) (n)
$rozpietoscNumeracji = 3:
1 2 3... (i - 2)(i-1) (i ) (i+1) (i+2) ... (n-1)(n-1) (n)

i niech zwraca 3 tablice z numerami stron: poczatkowymi, wokol obecnej i koncowymi, zeby user mogl zcustomizowac sobie sposob wyswietlania linkow.

Dla jasnosci: to sa tylko sugestie smile.gif


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Apo
post 29.01.2006, 17:25:22
Post #11





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


dr_bonzo to ile poprawiłem tongue.gif
Ale nie wiem czemu nie może być $page = $_GET['page']
Nie lubie w kodzie pisać $_GET['page'] tongue.gif
Narazie nie bede tego kodu poprawiał bo bede pisał bardziej rozbudowaną klase może smile.gif
Go to the top of the page
+Quote Post
dr_bonzo
post 29.01.2006, 17:44:43
Post #12





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

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


Cytat
Ale nie wiem czemu nie może być $page = $_GET['page']
Nie lubie w kodzie pisać $_GET['page'] tongue.gif

Chodzilo mi o uniezaleznienie funkcji od tej zmienne ( 'page' )j, np. nice URLe gdzie nie bedzie $_GET[ 'page' ] to jako pobierzesz wartosc $_GET['page']?

Poza tym nie sprawdzasz czy $_GET[ 'page' ] istnieje...


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Athlan
post 29.01.2006, 19:23:58
Post #13





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


Cytat
Poza tym nie sprawdzasz czy $_GET[ 'page' ] istnieje...


Może tak:

  1. <?
  2. $page = $_GET['page'];
  3. if(!isset($page)){ $page = 1; }
  4. ?>


Jeżeli nie ma strony na gecie robi stronę o numerku 1.

Dodatkowe zabezpieczenie:

  1. <?
  2. $page = $_GET['page'];
  3. if($page < 0){ $page = 1; } // jeżeli mniejsze od 0 to jest równe 1.
  4. if($page > $ilosc_stron_newsow){ $page = $ilosc_stron_newsow; }
  5. /* Jeżeli np. 24 newsy posortowane po 10:
  6. koleś poda $page 764953694365 to przejdzie
  7. do strony 3, czyli maksymalnej dla 24 newsów
  8. po 10 */
  9. ?>


albo

  1. <?php
  2.  
  3. if($page < 0 || $page > $ilosc_stron_newsow){ echo'Nie ma takiej strony'; } ?>


Takie fajowe bajerki zawsze można zamontować smile.gif

Ten post edytował Athlan 29.01.2006, 19:30:20


--------------------
Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij pod postem.
Go to the top of the page
+Quote Post
Apo
post 29.01.2006, 20:16:36
Post #14





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


I bez tego można sie obejść. Tylko marnujesz milisekundy na takie coś, a tak to nie ma znaczenia. Najwyżej bedzie taki efekt http://php.webhelp.pl/index.php?di=40&roz=php&ac=art
więc nic sie nie stanie smile.gif

bug to jest xss, różne injectiony a nie takie coś aarambo.gif

Ten post edytował Apo 30.01.2006, 09:31:53
Go to the top of the page
+Quote Post
Athlan
post 29.01.2006, 20:58:02
Post #15





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


[QUOTE]Tylko marnujesz milisekundy[QUOTE]

Ale zmarnujesz laugh.gif jakieś 0.000001 to mi nie zależe @Apo... a efekt dobry, tak powstają tak zwane BUGI (niektórzy czytają BAGI, @Apo wiesz kto... buahaha)


--------------------
Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij pod postem.
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: 14.08.2025 - 13:26