Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [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
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




To pokaż, jak próbujesz.
Go to the top of the page
+Quote Post
john_doe
post
Post #3





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

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


obadaj sobie takie zapytanie

  1. $SELECT_NEWS = "SELECT SQL_CALC_FOUND_ROWS *
  2. FROM tabela
  3. LIMIT " . mysql_escape_string((int)$_GET['page']*ILOSC_WYNIKOW_NA_STRONIE).",".ILOSC_WYNIKOW_NA_STRONIE;


potem na stronie

  1.  
  2. define('ILOSC_WYNIKOW_NA_STRONIE', 4);
  3.  
  4. $resultPager = connect( $SELECT_COUNT_ROWS ); // łączysz się i pytasz bazę ile zwraca wyników zapytanie które wykonujesz
  5.  
  6. $returnedRecords = mysql_result( $resultPager, 0 );
  7.  
  8. if( $_GET['page'] > 0 )
  9. {
  10. //print previous page link
  11. print '<a href="?page='.( $_GET['page'] - 1 ).'">Poprzednia</a> ';
  12. }
  13.  
  14. for( $i = 0 ; $i < ceil( $returnedRecords / ILOSC_WYNIKOW_NA_STRONIE ) ; $i++ )
  15. {
  16. if( $i == $_GET['page'] )
  17. {
  18. print '<a href="?page='.( $i ).'"><b>[ '.( $i + 1 ).' ]</b></a> ';
  19. }else print '<a href="?page='.( $i ).'">[ '.( $i + 1 ).' ]</a> ';
  20. }
  21. //if we aren`t on the last page
  22. if( $_GET['page'] + 1 < ceil( ( $returnedRecords / ILOSC_WYNIKOW_NA_STRONIE ) ) )
  23. {
  24. //print next page link
  25. print '<a href="?page='.( $_GET['page'] + 1 ).'">Następna</a>';
  26. }
  27.  


powinno Ci to pomóc. 100% działa
Go to the top of the page
+Quote Post
lobopol
post
Post #4





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

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


Niezbyt oto mi chodziło, ale już prawie sobie poradziłem, strukturalnie już stworzyłem teraz staram się ładną klasę z tego zrobić.
Go to the top of the page
+Quote Post
thek
post
Post #5





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
lobopol
post
Post #6





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

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


Umieścił bym kod, jaki usmażyłem, ale to ponad 120 linii i wywala, że post za długi, jak go nieco poprawie to wrzucę (IMG:style_emoticons/default/smile.gif) .
Go to the top of the page
+Quote Post

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: 22.09.2025 - 21:30