Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Problem ze stronicowaniem
lobopol
post
Post #1





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


Od wczoraj męczę się nad zrobieniem prostego stronicowania. Celem moim jest wyświetlanie stron w formie:
łącznie stron = 9:
|<< poprzednia 1 2 3 4 5 następna >>| tu wybrana strona 3 link nieaktywny (nieaktywny link dla ułatwienia oznaczam pogrubieniem+podkreśleniem)
|<< poprzednia 1 2 3 4 5 6 7 8 9 następna >>| tu wybrana strona 3
|<< poprzednia 1 2 3 4 5 6 7 8 9 następna >>| tu wybrana strona 6
|<< poprzednia 1 2 3 4 5 następna >>| tu wybrana strona 1
|<< poprzednia 1 2 3 4 5 6 7 8 9 następna >>|

stron > 10
|<< poprzednia 2 3 4 5 6 7 8 9 10 11 następna >>| tu wybrana strona 6
|<< poprzednia 3 4 5 6 7 8 9 10 11 12 następna >>| tu wybrana strona 7
|<< poprzednia 5 6 7 8 9 10 11 12 13 14 następna >>| tu wybrana strona 9

stron = 15
|<< poprzednia 1 2 3 4 5 6 7 8 9 10 następna >>| tu wybrana strona 4
|<< poprzednia 3 4 5 6 7 8 9 10 11 12 następna >>| tu wybrana strona 7
|<< poprzednia 5 6 7 8 9 10 11 12 13 14 następna >>| tu wybrana strona 9
|<< poprzednia 6 7 8 9 10 11 12 13 14 15 następna >>| tu wybrana strona 14
|<< poprzednia 6 7 8 9 10 11 12 13 14 15 następna >>| tu wybrana strona 15

Wiem, że najprościej byłoby użyć klasy nospora, ale ona jest gigantyczna i jednak wolałbym rozwiązanie które łatwiej by było ogarnąć .
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Tak na baaaardzo szybko (IMG:style_emoticons/default/smile.gif) Używam z powodzeniem w wielu projektach z małymi modyfikacjami tyczącymi SEO-friendly url. I jedna uwaga... Ja mam zrobione t tak, że strona pierwsza to 1, nie jak zazwyczaj 0 (IMG:style_emoticons/default/smile.gif) Tak by user nawet wpisując z palca mi numery stron miał to logiczne a więc strona pierwsza to 1, druga to 2 a nie, że pierwsza to 0, a druga to 1. oczywiście pominąłem kompletnie tutaj zabezpieczenie przed wpisaniem numeru większego niż $pages oraz mniejszego niż 1. Sam obczaj co zrobić (IMG:style_emoticons/default/winksmiley.jpg) To tylko prosty if (IMG:style_emoticons/default/smile.gif)
  1. $sql = 'SELECT SQL_CALC_FOUND_ROWS różnee_bla_bla FROM tabela WHERE warunki LIMIT start i koniec'; //zapytanie główne z wynikami... zauważ sql_calc.. po nim nie ma przecinka. jest BONUSEM
  2. //tu sobie leci strona a paginacja zaczyna się tutaj
  3. $pagin_where = '?page='; //tutaj jest wrzucany link jaki ma być widoczny w paginatorze. Może być cokolwiek w stylu /strona/kategoria/ byle htaccess obsłużył
  4. //paginacja
  5. $ile = mysql_result( mysql_query('SELECT FOUND_ROWS() AS ile'), 0, 0); //na szybko wystarczy ale możesz zabezpieczać bardziej :)
  6. $row_per_page = 10; //ilość wyników na stronę;
  7. $pages = ceil( $ile/$row_per_page );
  8. $side = 3; //tutaj podany jest "zakres" stron po lewej i prawej stronie od obecnej a więc po max 3 z każdej strony. maksymalnie więc 3 z lewej, obecna, 3 z prawej
  9. if( $pages > 1 ) { //czy paginator ma własciwie być widoczny czy nie? jeśli wyniki na 1 stronie to olej
  10. echo '<div id="paginator">'; //ja mam id i potem klasy by sobie ostylować wedle upodobań :)
  11. if( $page > 1 ) { //jesli inna strona niż pierwsza to dodaj linki "pierwsza" i "poprzednia"
  12. echo '<a href="'.$pagin_where.'1">Pierwsza</a><a href="'.$pagin_where.($page-1).'">Poprzednia</a>';
  13. }
  14. for( $i=$page-$side; $i<=$page+$side; $i++ ) { //tu jest cały środek ze stronami
  15. if( $i<1 OR $i>$pages ) { //to dla stron "spoza zakresu", a więc typu -1 czy większych niż ilość stron
  16. continue;
  17. } elseif( $i == $page ) {
  18. echo '<a class="now" href="">'.$i.'</a>'; //obecna strona
  19. } else
  20. echo '<a href="'.$pagin_where.$i.'">'.$i.'</a>'; //a to dla znajdujących się w zakresie i możliwych do wyświetlenia
  21. }
  22. if( $page < $pages ) { //dla stron innych niż ostatnia linki "następna" i "ostatnia"
  23. echo '<a href="'.$pagin_where.($page+1).'">Następna</a><a href="'.$pagin_where.$pages.'">Ostatnia</a>';
  24. }
  25. echo '</div>';
  26. }


EDIT: Zrobienie z tego klasy lub funkcji to banał. Jako parametry wchodzą numer strony, liczba stron i link oraz zakres... W zasadzie to masz wtedy jedynie w klasie kawałek od if( $pages > 1 ) do końca, bo cała reszta wchodzi jako parametry.

Ten post edytował thek 10.02.2010, 10:48:17
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 14.10.2025 - 08:14