Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Podstrony problem
Forum PHP.pl > Forum > Przedszkole
mefjiu
Witam,
znalazłem kiedyś w sieci skrypcik do numerowania stron używam go na wielu serwisach ale w tym który teraz tworzę potrzebuję go troszkę zmodyfikować.

Otóż chodzi o to że chciałbym aby skrypt zamiast pierwszej podstrony czyli w tym przypadku

"index.php?page=0"
zwracał
"index.php"

a zamiast mnożyć strony przez 10 dawał wyniki kolejno tzn. na 2 podstronie link wyglądał by tak

index.php?page=2
a nie jak jest w tej chili
index.php?page=10

Kompletnie nie wiem jak to zrobić jest to troszkę zagmatwane, więc proszę o pomoc speców. snitch.gif

Kod wygląda tak:
  1. <?php
  2.  
  3. //link  ilość stron pobierane z GET ilosc wynikow na tsronie
  4. function Pagination( $base_link, $num_items, $start_item, $per_page )
  5. {
  6. $total_pages = ceil( $num_items/$per_page );
  7. if ( $total_pages == 1 )
  8. {
  9. return '';
  10. }
  11. $on_page = floor($start_item / $per_page) + 1;
  12. $page_string = '';
  13. if ( $total_pages > 10 )
  14. {
  15. $init_page_max = ( $total_pages > 3 ) ? 3 : $total_pages;
  16. for($i = 1; $i < $init_page_max + 1; $i++)
  17. {
  18. $page_string .= ( $i == $on_page ) ? $i : sprintf( $base_link, ( ( $i - 1 ) * $per_page ), $i );
  19. if ( $i < $init_page_max )
  20. {
  21. $page_string .= ", ";
  22. }
  23. }
  24. if ( $total_pages > 3 )
  25. {
  26. if ( $on_page > 1 && $on_page < $total_pages )
  27. {
  28. $page_string .= ( $on_page > 5 ) ? ' ... ' : ', ';
  29. $init_page_min = ( $on_page > 4 ) ? $on_page : 5;
  30. $init_page_max = ( $on_page < $total_pages - 4 ) ? $on_page : $total_pages - 4;
  31. for($i = $init_page_min - 1; $i < $init_page_max + 2; $i++)
  32. {
  33. $page_string .= ($i == $on_page) ? $i : sprintf( $base_link, ( ( $i - 1 ) * $per_page ), $i );
  34. if ( $i < $init_page_max + 1 )
  35. {
  36. $page_string .= ', ';
  37. }
  38. }
  39. $page_string .= ( $on_page < $total_pages - 4 ) ? ' ... ' : ', ';
  40. }
  41. else
  42. {
  43. $page_string .= ' ... ';
  44. }
  45. for($i = $total_pages - 2; $i < $total_pages + 1; $i++)
  46. {
  47. $page_string .= ( $i == $on_page ) ? $i : sprintf( $base_link, ( ( $i - 1 ) * $per_page ), $i );
  48. if( $i < $total_pages )
  49. {
  50. $page_string .= ", ";
  51. }
  52. }
  53. }
  54. }
  55. else
  56. {
  57. for($i = 1; $i < $total_pages + 1; $i++)
  58. {
  59. $page_string .= ( $i == $on_page ) ? $i : sprintf( $base_link, ( ( $i - 1 ) * $per_page ), $i );
  60. if ( $i < $total_pages )
  61. {
  62. $page_string .= ', ';
  63. }
  64. }
  65. }
  66. if ( $on_page > 1 )
  67. {
  68. $page_string = sprintf( $base_link, ( ( $on_page - 2 ) * $per_page ), 'Prev' ) . '&nbsp;' . $page_string;
  69. }
  70. if ( $on_page < $total_pages )
  71. {
  72. $page_string .= '&nbsp;' . sprintf( $base_link, ( $on_page * $per_page ), 'Next' );
  73. }
  74. return $page_string;
  75. }
  76.  
  77. define('ILOSC_WYNIKOW_NA_STRONIE', 10);
  78. $statistic = 5000;
  79.  
  80. $start = ( isset( $_GET['page'] ) && is_numeric( $_GET['page'] ) ) ? $_GET['page'] : 1;
  81. echo Pagination( '<a href="index.php?page=%d"><b>%s</b></a>', $statistic, $start, ILOSC_WYNIKOW_NA_STRONIE);
  82. ?>



Myślę, że ten skrypcik przyda się wielu z was tych mniej zaawansowanych programistów biggrin.gif
Darti
zgaduję, bo zaspany jestem, ostatnie linijki zamień na:
  1. <?php
  2. define('ILOSC_WYNIKOW_NA_STRONIE', 1);
  3. $statistic = 5000;
  4.  
  5. $start = ( isset( $_GET['page'] ) && is_numeric( $_GET['page'] ) ) ? $_GET['page'] : 1;
  6. $pagination = Pagination( '<a href="index.php?page=%d"><b>%s</b></a>', $statistic, $start, ILOSC_WYNIKOW_NA_STRONIE);
  7. echo str_replace ('?page=0','',$pagination);
  8. ?>
mefjiu
W efekcie tego sprawa wygląda następująco:

1. działa ilość podstron zgadza się :-)
2. po kliknięciu na 1 podstronę przechodzi o 2 podstrony :-(
3. każda podstrona to liczba - 1 :-(

:-) działa
:-( nie działa
Darti
  1. <?php
  2. //link  ilość stron pobierane z GET ilosc wynikow na tsronie
  3. function Pagination( $base_link, $num_items, $start_item, $per_page )
  4. {
  5. $total_pages = floor( $num_items/$per_page );
  6. if ( $total_pages == 1 )
  7. {
  8. return '';
  9. }
  10. $on_page = round($start_item / $per_page);
  11. $page_string = '';
  12. if ( $total_pages > 10 )
  13. {
  14. $init_page_max = ( $total_pages > 3 ) ? 3 : $total_pages;
  15. for($i = 1; $i < $init_page_max + 1; $i++)
  16. {
  17. $page_string .= ( $i == $on_page ) ? $i : sprintf( $base_link, ( ( $i ) * $per_page ), $i );
  18. if ( $i < $init_page_max )
  19. {
  20. $page_string .= ", ";
  21. }
  22. }
  23. if ( $total_pages > 3 )
  24. {
  25. if ( $on_page > 1 && $on_page < $total_pages )
  26. {
  27. $page_string .= ( $on_page > 5 ) ? ' ... ' : ', ';
  28. $init_page_min = ( $on_page > 4 ) ? $on_page : 5;
  29. $init_page_max = ( $on_page < $total_pages - 4 ) ? $on_page : $total_pages - 4;
  30. for($i = $init_page_min - 1; $i < $init_page_max + 2; $i++)
  31. {
  32. $page_string .= ($i == $on_page) ? $i : sprintf( $base_link, ( ( $i - 0 ) * $per_page ), $i );
  33. if ( $i < $init_page_max + 1 )
  34. {
  35. $page_string .= ', ';
  36. }
  37. }
  38. $page_string .= ( $on_page < $total_pages - 4 ) ? ' ... ' : ', ';
  39. }
  40. else
  41. {
  42. $page_string .= ' ... ';
  43. }
  44. for($i = $total_pages - 1; $i < $total_pages + 1; $i++)
  45. {
  46. $page_string .= ( $i == $on_page ) ? $i : sprintf( $base_link, ( ( $i - 0 ) * $per_page ), $i );
  47. if( $i < $total_pages )
  48. {
  49. $page_string .= ", ";
  50. }
  51. }
  52. }
  53. }
  54. else
  55. {
  56. for($i = 1; $i < $total_pages + 1; $i++)
  57. {
  58. $page_string .= ( $i == $on_page ) ? $i : sprintf( $base_link, ( ( $i - 1 ) * $per_page ), $i );
  59. if ( $i < $total_pages )
  60. {
  61. $page_string .= ', ';
  62. }
  63. }
  64. }
  65. if ( $on_page > 1 )
  66. {
  67. $page_string = sprintf( $base_link, ( ( $on_page - 1 ) * $per_page ), 'Prev' ) . ' ' . $page_string;
  68. }
  69. if ( $on_page < $total_pages )
  70. {
  71. $page_string .= ' ' . sprintf( $base_link, ( $on_page + 1 * $per_page ), 'Next' );
  72. }
  73. return $page_string;
  74. }
  75.  
  76. define('ILOSC_WYNIKOW_NA_STRONIE', 1);
  77. $statistic = 5000;  
  78. $start = ( isset( $_GET['page'] ) && is_numeric( $_GET['page'] ) ) ? $_GET['page'] : 1;
  79. $pagination = Pagination( '<a href="index.php?page=%d"><b>%s</b></a>', $statistic, $start, ILOSC_WYNIKOW_NA_STRONIE);
  80. echo str_replace ('?page=1','',$pagination);
  81. ?>
mefjiu
Dalej problemy :-( a mianowicie link z numerkiem 10 przechodzi do adresu index.php0 i dodatkowo linki z prawej czyli
1, 2, 3 ... 4999, 5000 Next

po kliknięciu w 4999 nie pokazuje wcześniejszej liczby :-(

a dodatkowo tej definicji nie można zmieniać
define('ILOSC_WYNIKOW_NA_STRONIE', 1);

ponieważ jeżeli jest ona zmieniona na 1 to będzie pokazywać tylko jeden rekord z bazy danych a ma ich pokazywać 10

Także proszę o dalszą pomoc przy tym problemie
Darti
ehhh własnie, przy setnej i tysiecznej będzie podobnie, chodzi o ostatnią linię, trzeba by użyć wyrażeń regularnych

edit:
Albo i nie smile.gif

  1. <?php
  2. echo str_replace ('?page=1">','">',$pagination);
  3. ?>
mefjiu
Darti edytowałem post wyżej bo napotkałem dodatkowe problemy

to co napisałeś działa ale tak jak pisałem wyżej nie załatwia tych 2 problemów tzn.

Cytat
dodatkowo, linki z prawej czyli
1, 2, 3 ... 4999, 5000 Next

po kliknięciu w 4999 nie pokazuje wcześniejszej liczby :-(

a dodatkowo tej definicji nie można zmieniać
define('ILOSC_WYNIKOW_NA_STRONIE', 1);

ponieważ jeżeli jest ona zmieniona na 1 to będzie pokazywać tylko jeden rekord z bazy danych a ma ich pokazywać 10
Darti
Ale za pobieranie wyników z bazy danych odpowiedzialna jest inna część kodu, tam zapewne jest LIMIT w zapytaniu sql`owym, ,który decyduje ile tego pobrać, trzeba go przemnożyć przez 10 a paginację modyfikować w tym kierunku, który obrałem
mefjiu
od nowa sad.gif kurde a tak ładnie szło

na początku kombinowałem to tak

zostawiłem tam w define te 10 aby tyle było zapytań z bazy

a zmieniałem
  1. <?php
  2. $page_string .= ( $i == $on_page ) ? $i : sprintf( $base_link, ( ( $i - 0 ) * $per_page ), $i );
  3. ?>

na
  1. <?php
  2. $page_string .= ( $i == $on_page ) ? $i : sprintf( $base_link, ( $i - 0 ), $i );
  3. ?>

czyli usuwałem te mnożenie przez 10 i niby dawało to linki o jeden ale psuło resztę, może tobie się tak coś uda.

Cytat(Darti @ 22.11.2007, 14:17:27 ) *
Ale za pobieranie wyników z bazy danych odpowiedzialna jest inna część kodu, tam zapewne jest LIMIT w zapytaniu sql`owym, ,który decyduje ile tego pobrać, trzeba go przemnożyć przez 10 a paginację modyfikować w tym kierunku, który obrałem



tak ale jak tak zamotam z tym wszystkim to już nikt tam się w kodzie nie połapię a przerabiam cms'a i wolę starać się go poprawiać anie jeszcze dodatkowo wszystko zapętlać.

a po 2 te define jak by nie chciał to musi być 10 sad.gif bo wtedy np pokazuje z 5000 podstron dokładnie te 500o a powinno być 500 bo 5000/10=500
Darti
ale jeżeli ma tak być, że zmienna $page ma dokładnie określać numer strony to ILOSC_WYNIKOW_NA_STRONIE musi być 1, a zmienić trzeba pobieranie z bazy, a zmienną $statistics zmienic na 500 (co da 500 stron).
Innym wyjściem jest całkowita zmiana tej funkcji (i tak w tej funkcji ta ilość $per page moim zdaniem jest niepotrzebna).
Na razie poprawiłem błąd ze stroną nr 4999:
  1. <?php
  2. //link  ilość stron pobierane z GET ilosc wynikow na tsronie
  3. function Pagination( $base_link, $num_items, $start_item, $per_page )
  4. {
  5. $total_pages = floor( $num_items/$per_page );
  6. if ( $total_pages == 1 )
  7. {
  8. return '';
  9. }
  10. $on_page = round($start_item / $per_page);
  11. $page_string = '';
  12. if ( $total_pages > 10 )
  13. {
  14. $init_page_max = ( $total_pages > 3 ) ? 3 : $total_pages;
  15. for($i = 1; $i < $init_page_max + 1; $i++)
  16. {
  17. $page_string .= ( $i == $on_page ) ? $i : sprintf( $base_link, ( ( $i ) * $per_page ), $i );
  18. if ( $i < $init_page_max )
  19. {
  20. $page_string .= ", ";
  21. }
  22. }
  23. if ( $total_pages > 3 )
  24. {
  25. if ( $on_page > 1 && $on_page < $total_pages )
  26. {
  27. $page_string .= ( $on_page > 5 ) ? ' ... ' : ', ';
  28. $init_page_min = ( $on_page > 4 ) ? $on_page : 5;
  29. $init_page_max = ( $on_page < $total_pages - 4 ) ? $on_page : $total_pages - 4;
  30. for($i = $init_page_min - 2; $i < $init_page_max + 2; $i++)
  31. {
  32. $page_string .= ($i == $on_page) ? $i : sprintf( $base_link, ( ( $i + 1 ) * $per_page ), $i+);
  33. if ( $i < $init_page_max + 1 )
  34. {
  35. $page_string .= ', ';
  36. }
  37. }
  38. $page_string .= ( $on_page < $total_pages - 4 ) ? ' ... ' : ', ';  
  39. }
  40. else
  41. {
  42. $page_string .= ' ... ';
  43. }
  44. for($i = $total_pages - 1; $i < $total_pages + 1; $i++)
  45. {
  46. $page_string .= ( $i == $on_page ) ? $i : sprintf( $base_link, ( ( $i ) * $per_page ), $i );
  47. if( $i < $total_pages )
  48. {
  49. $page_string .= ", ";
  50. }
  51. }
  52. }
  53. }
  54. else
  55. {
  56. for($i = 1; $i < $total_pages + 1; $i++)
  57. {
  58. $page_string .= ( $i == $on_page ) ? $i : sprintf( $base_link, ( ( $i - 1 ) * $per_page ), $i );
  59. if ( $i < $total_pages )
  60. {
  61. $page_string .= ', ';
  62. }
  63. }
  64. }
  65. if ( $on_page > 1 )
  66. {
  67. $page_string = sprintf( $base_link, ( ( $on_page - 1 ) * $per_page ), 'Prev' ) . ' ' . $page_string;
  68. }
  69. if ( $on_page < $total_pages )
  70. {
  71. $page_string .= ' ' . sprintf( $base_link, ( $on_page + 1 * $per_page ), 'Next' );
  72. }
  73. return $page_string;
  74. }
  75.  
  76. define('ILOSC_WYNIKOW_NA_STRONIE', 1);
  77. $statistic = 5000; 
  78. $start = ( isset( $_GET['page'] ) && is_numeric( $_GET['page'] ) ) ? $_GET['page'] : 1;
  79. $pagination = Pagination( '<a href="index.php?page=%d"><b>%s</b></a>', $statistic, $start, ILOSC_WYNIKOW_NA_STRONIE);
  80. echo str_replace ('?page=1">','">',$pagination);
  81. ?>
mefjiu
ok działa już wszystko z resztą będę kombinował po stronie zapytania sql :-) wielkie dzięki darti
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.