Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: tworzenie ładnych numerków po stronicowaniu :P
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Apo
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
Birkoff
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
michal1991
Witam,
Mógłby mi ktoś powiedzieć jak to odpalić, bo ja nie wiem jak.


Pozdrawiam
Michał
ikioloak
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.
michal1991
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?
FiDO
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.
Athlan
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
Apo
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
Athlan
Chodziło mi o to, żeby po wpisaniu (numeru strony) w okienko do formularza przechodzimy w daną. Naucz się czytać @Apo
dr_bonzo
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
Apo
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
dr_bonzo
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...
Athlan
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
Apo
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
Athlan
[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)
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.