Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Stronicowanie
marcin0077
post
Post #1





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 18.10.2008

Ostrzeżenie: (10%)
X----


Witam

Mam mały problem ze stronicowaniem. Stronicowanie pokazuje wszystkie strony (numerki) od razu a chciałbym zrobić zeby pokazywało np 15 (7 stron po lewej, 1 strona aktualna i 7 stron po prawej )

Mam taki kod:

  1. <?php
  2. if($_GET[page]>0){
  3. echo '<li><a class="nl" href="get_defual_p' . ($_GET[ 'page' ]-1) . '.html">Poprzednia strona </a></li>';}
  4.  
  5. if($_GET['page']>=($pages+10)){
  6. echo '<li><a class=\"nl" . $addClass . "\" href=/>1</a></li>... ';
  7. }
  8.  
  9. $query = $db->query_first("SELECT COUNT(*) AS activeItems FROM items WHERE isWaiting = '0'");
  10. $pages = $query["activeItems"]/$showPerPage;
  11.  
  12. for($i=0;$i<$pages;++$i) {
  13. if($_GET["page"] == $i) {
  14. $addClass = " selo";
  15. } else {
  16. $addClass = "";
  17. }
  18. echo "<li><a class=\"nl" . $addClass . "\" href=\"./get_default_p" . $i . ".html\">" . ($i+1) . "</a></li>\n";
  19. }
  20. $ii = $i-1;
  21. if($_GET['page']<=($pages-10)){
  22. echo "... <li><a class=\"nl" . $addClass . "\" href=\"./get_default_p" . $ii . ".html\">" . $i . "</a></li>\n";
  23. }
  24.  
  25.  
  26. if($_GET['page']<floor($pages-1)){
  27. echo '<li><a class="nl" href="get_defual_p' . ($_GET[ 'page' ]+1) . '.html">Następna strona </a></li>';
  28. }
  29. ?>


Czy da się coś z tym zrobić?

nie da rady?

Ten post edytował marcin0077 21.03.2010, 19:06:09
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
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




Da się... musisz określić na starcie "szerokość zakresu". Ja robię to tak, że kod obejmuję w pętlę która ma zakres <obecna_strona - promień, obecna_strona + promień >
Jeśli w pętli strona jest poniżej pierwszej lub większa niż ostatnia to robię continue smile.gif Efekt? taki winksmiley.jpg
  1. $promien = 4;
  2. $obecna = 3;
  3. $max = ceil( $wyników/$ile_na_strone );
  4. for( $i=$obecna-$promien; $i<$obecna-$promien; $i++) {
  5. if( $i < 0 || $i > $max )
  6. continue;
  7. //a tutaj normalna paginacja
  8. }
To jest oczywiście zależne od tego jak liczysz strony... Czy od 0 czy od 1 jako pierwszej, ale to już minimalnie wpływa na skrypt. Jedynie musisz odpowiednio zmodyfikować nierówności i start pętli. Popatrz na to, przeanalizuj i zastosuj. W podanym przykładzie zacznie od -1 (bo 3-4=-1), ale oleje ten krok poprzez continue smile.gif

EDIT: Można to optymalizować gdy jest ogrom stron poprzez i gdy $i przekroczy $max to zwyczajnie zrobi break co zakończy pętlę. Można sprawdzać na starcie początek ($obecna-promień) i ustawiać $i na 0 lub określoną wartość wyliczoną. To już kwestia optymalizacji. Ja podałem Ci podstawowe rozwiązanie, ktore możesz modyfikować.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
marcin0077
post
Post #3





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 18.10.2008

Ostrzeżenie: (10%)
X----


niby rozumiem o co chodzi ale coś nie działa hmm

  1. <?php
  2.  
  3.  
  4.  
  5.  
  6. $query = $db->query_first("SELECT COUNT(*) AS activeItems FROM items WHERE isWaiting = '0'");
  7. $pages = $query["activeItems"]/$showPerPage;
  8.  
  9. $promien = 4;
  10. $obecna = 4;
  11. $max = ceil( $query["activeItems"]/$showPerPage );
  12. for( $i=$obecna-$promien; $i<$obecna-$promien; $i++) {
  13. if( $i < 0 || $i > $max )
  14. continue;
  15. for($i=0;$i<$pages;++$i) {
  16. if($_GET["page"] == $i) {
  17. $addClass = " selo";
  18. } else {
  19. $addClass = "";
  20. }
  21. echo "<li><a class=\"nl" . $addClass . "\" href=\"./get_default_p" . $i . ".html\">" . ($i+1) . "</a></li>\n";
  22. }
  23.  
  24. }
  25. ?>


strony u mnie zaczyna od 0

Ten post edytował marcin0077 22.03.2010, 12:48:23
Go to the top of the page
+Quote Post
thek
post
Post #4





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




Ech... $obecna = $_GET['page'] czy coś w ten deseń... Nie kopiuj bezmyślnie tylko dopasuj poprawnie do swojego skryptu...


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
marcin0077
post
Post #5





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 18.10.2008

Ostrzeżenie: (10%)
X----


dopasowuję już 2 godzinę to i nic ;/

  1. <?php
  2.  
  3.  
  4.  
  5.  
  6. $query = $db->query_first("SELECT COUNT(*) AS activeItems FROM items WHERE isWaiting = '0'");
  7. $pages = $query["activeItems"]/$showPerPage;
  8.  
  9. $promien = 4;
  10. $obecna = $_GET["page"];
  11. $max = ceil($pages);
  12. for( $i=$obecna-$promien; $i<$obecna-$promien; $i++) {
  13. if( $i = 0 || $i < $max )
  14. continue;
  15. for($i=0;$i<$pages;++$i) {
  16. if($_GET["page"] == $i) {
  17. $addClass = " selo";
  18. } else {
  19. $addClass = "";
  20. }
  21. echo "<li><a class=\"nl" . $addClass . "\" href=\"./get_default_p" . $i . ".html\">" . ($i+1) . "</a></li>\n";
  22. }
  23.  
  24. }
  25. ?>


Ten post edytował marcin0077 22.03.2010, 13:57:16
Go to the top of the page
+Quote Post
thek
post
Post #6





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




No tak... Opisałem problem, ale w kod wkradła się literówka... Zauważ, że w opisie problemu mam
Cytat
<obecna_strona - promień, obecna_strona + promień >

Ale w kodzie jest:
  1. for( $i=$obecna-$promien; $i<$obecna-$promien; $i++) {

a powinno być:
  1. for( $i=$obecna-$promien; $i<$obecna+$promien; $i++) {
Zwróć uwagę, że wrzuciło mi - zamiast + przy limicie górnym pętli. Stąd nigdy nie ruszała nawet pętla i nic nie wyświetlało smile.gif

Można więc powiedzieć, że skopiowałeś kod, ale nie czytałeś opisu zamiast się zastanowić ciut winksmiley.jpg Ja zaś owej literówki nie zauważyłem od razu.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
marcin0077
post
Post #7





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 18.10.2008

Ostrzeżenie: (10%)
X----


opis czytałem z 5 razy ale nie zauważyłem że tam akurat minus jest haha.gif
kilka drobnych zmian + usunięcie starego for'a i działa smile.gif
dzięki bardzo
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 Aktualny czas: 19.08.2025 - 16:19