Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Dodanie nowego parametru do filtrowania rekordów
Forum PHP.pl > Forum > Przedszkole
tomaszowiaktv
Witam serdecznie.

Korzystam z CMS PHP Fusion 7.02.

Jest tam pewien plik, mianowicie news_cats.php, który wyświetla nam wszystkie rekordy z bazy, newsy z podziałem na przypisane im kategorię.
Ten wynik możemy podejrzeć tutaj: http://tomaszowiak.pl/news_cats.php
Mamy nagłówki z nazwami poszczególnych kategorii, potem listę dodanych aktualiści przypisanych do tej kategorii.

Gdy wybierzemy odnośnik "Zobacz wszystkie" przy jakiejś kategorii to wyświetlimy aktualności tylko z danej kategorii.
Np wybieramy pierwszą kategorię. Jej odnośnik wygląda następująco (do url dodany jest parametr definiujący nam id kategorii): http://tomaszowiak.pl/news_cats.php?cat_id=1


W zapytaniu do bazy danych jest warunek, który nam to filtruje w odpowiedni sposób:
  1. WHERE news_cat_id='".$_GET['cat_id']."'


Filtrujemy tylko rekordy w których parametr news_cat_id=1.

Do tej pory wszystko działa ok. Teraz przejdę do mojego problemu.
Jesteśmy tutaj: http://tomaszowiak.pl/news_cats.php?cat_id=1

Ograniczyłem ilość wyświetlanych rekordów na jednej stronie do 3.
Pod spodem wygenerowana została tzw. page navigation, za pomocą której przełączamy się do następnych stron w sytuacji gdy ilość rekordów jest większa niż określony limit na jedną stronę.

Strona 1 z 112: 1 2 3 4...112

Teraz po wybraniu kolejnej strony powinny nam się wyświetlać następne rekordy z bazy. Do URL natomiast zostaje dodany parametr nazwany rowstart.
Tutaj przykłąd poprawnie działającego page navigation: http://tomaszowiak.pl/czytaj-na-sygnale.php?rowstart=11 . Z tym że w tym przypadku musiałem utworzyć kolejny plik w php, w którym sam ręcznie wprowadziłem w zapytaniu id kategorii aktualności. Działa to poprawnie jednak do każdej kategorii muszę tworzyć nowy plik php. Przy dużej ilości kategorii robi się chaos.

Chciałbym wyświetlać poszczególne rekordy z wybranych kategorii korzystając z jednego pliku php (news_cats.php) oraz za pomocą jego w działający sposób korzystać z page navigation.
TAK ABY URL DECYDOWAŁ O KATEGORII ORAZ O PAGE NAVIGATION, np miał postać taką: http://tomaszowiak.pl/news_cats.php?cat_id=1?rowstart=3 - tutaj mamy kombinację dwóch parametrów.
W jaki sposób należy zmodyfikować plik news_cats.php aby taka kombinacja działała poprawnie?

Plik news_cats.php:
W tym pliku działa poprawnie filtrowanie rekordów z wybranej kategorii. Do url zostaje dodane news_cats.php?cat_id=1.

Za tą filtracje na pewno odpowiada ta linijka (8):
  1. if (isset($_GET['cat_id']) && isnum($_GET['cat_id'])) {


  1. <?php
  2.  
  3. require_once "maincore.php";
  4. require_once THEMES."templates/header.php";
  5. include LOCALE.LOCALESET."news_cats.php";
  6.  
  7. add_to_title($locale['global_200'].$locale['400']);
  8. $items_per_page = 3;
  9.  
  10. if (isset($_GET['cat_id']) && isnum($_GET['cat_id'])) {
  11. echo $_GET['rowstart'];
  12. $res = 0;
  13. $result = dbquery("SELECT news_cat_name FROM ".DB_NEWS_CATS." WHERE news_cat_id='".$_GET['cat_id']."'");
  14. if (dbrows($result) || $_GET['cat_id'] == 0) {
  15. $data = dbarray($result);
  16.  
  17. $rows = dbcount("(news_id)", DB_NEWS, "news_cat='".$_GET['cat_id']."' AND ".groupaccess('news_visibility')." AND (news_start='0'||news_start<=".time().") AND (news_end='0'||news_end>=".time().") AND news_draft='0'");
  18.  
  19.  
  20. ...
  21.  
  22. if ($rows > $items_per_page) echo "<div align='center' style=';margin-top:5px;'>\n".makepagenav($_GET['rowstart'],$items_per_page,$rows,3)."\n</div>\n";
  23.  
  24.  
  25.  
  26.  
  27. } else {
  28. echo "kat = 0 ".$locale['403']."<br />\n";
  29. echo "<strong>".$locale['401']."</strong> <p>$rows</p>\n";
  30. }
  31. $result2 = dbquery("SELECT news_id, news_subject FROM ".DB_NEWS." WHERE news_cat='".$_GET['cat_id']."' AND ".groupaccess('news_visibility')." AND (news_start='0'||news_start<=".time().") AND (news_end='0'||news_end>=".time().") AND news_draft='0' ORDER BY news_datestamp DESC LIMIT 10");
  32. while ($data2 = dbarray($result2)) {
  33. echo THEME_BULLET." <a href='news.php?readmore=".$data2['news_id']."'>".$data2['news_subject']."</a><br />\n";
  34. }
  35. echo "".THEME_BULLET." <a href='".FUSION_SELF."'>".$locale['406']."</a>";
  36. echo "<!--sub_news_cat-->\n";
  37. }
  38. }
  39. if (!$res) { redirect(FUSION_SELF); }
  40.  
  41. closetable();
  42. } else {
  43.  
  44.  
  45. ...
  46.  
  47. }
  48. require_once THEMES."templates/footer.php";
  49. ?>






Plik czytaj-na-sygnale.php:

W tym pliku działa poprawnie page navigation, czyli wyświetlanie rekordów z uwzględnieniem limitu ich ilości na stronę (w zapytaniu LIMIT). Do url zostaje dodane czytaj-na-sygnale.php?rowstart=11.

Za tą operacje pewnie odpowiada ta linijka:
  1. if (!isset($_GET['rowstart']) || !isnum($_GET['rowstart'])) { $_GET['rowstart'] = 0; }



  1. <?php
  2. require_once "maincore.php";
  3. require_once THEMES."templates/header.php";
  4. $i = 0;
  5. $cat = "2";
  6. $cat_name = "Na sygnale";
  7.  
  8. $items_per_page = $settings['newsperpage'];
  9. add_to_title($locale['global_200'].$locale['global_077']);
  10. if (!isset($_GET['readmore']) || !isnum($_GET['readmore'])) {
  11. $rows = dbcount(
  12. "(news_id)",
  13. DB_NEWS,
  14. groupaccess('news_visibility')." AND (news_start='0'||news_start<=".time().")
  15. AND (news_end='0'||news_end>=".time().")
  16. AND news_draft='0' AND news_cat='".$cat."'"
  17. );
  18. if (!isset($_GET['rowstart']) || !isnum($_GET['rowstart'])) { $_GET['rowstart'] = 0; }
  19.  
  20. if ($rows) {
  21.  
  22.  
  23.  
  24. ...
  25.  
  26.  
  27.  
  28. if ($rows > $items_per_page) echo "<div align='center' style=';margin-top:5px;'>\n".makepagenav($_GET['rowstart'],$items_per_page,$rows,3)."\n</div>\n";
  29.  
  30. } else {
  31.  
  32. opentable($locale['global_077']);
  33. echo "<div style='text-align:center'><br />\n".$locale['global_078']."<br /><br />\n</div>\n";
  34. closetable();
  35. }
  36. } else {
  37. if (!isset($_GET['rowstart']) || !isnum($_GET['rowstart'])) { $_GET['rowstart'] = 0; }
  38.  
  39. ...
  40.  
  41.  
  42.  
  43. if (dbrows($result)) {
  44. include INCLUDES."comments_include.php";
  45. // include INCLUDES."ratings_include.php";
  46. $data = dbarray($result);
  47. if (!isset($_POST['post_comment']) && !isset($_POST['post_rating'])) {
  48. $result2 = dbquery("UPDATE ".DB_NEWS." SET news_reads=news_reads+1 WHERE news_id='".$_GET['readmore']."'");
  49. $data['news_reads']++;
  50. }
  51. $news_cat_image = "";
  52. $news_subject = $data['news_subject'];
  53. if ($data['news_image_t1'] && $settings['news_image_readmore'] == "0") {
  54. $img_size = @getimagesize(IMAGES_N.$data['news_image']);
  55. $news_cat_image = "<a href=\"java script:;\" onclick=\"window.open('".IMAGES_N.$data['news_image']."','','scrollbars=yes,toolbar=no,status=no,resizable=yes,width=".($img_size[0]+20).",height=".($img_size[1]+20)."')\"><img src='".IMAGES_N_T.$data['news_image_t1']."' alt='".$data['news_subject']."' class='news-category' /></a>";
  56. } elseif ($data['news_cat_image']) {
  57. $news_cat_image = "<img src='".get_image("nc_".$data['news_cat_name'])."' alt='".$data['news_cat_name']."' />";
  58. }
  59. $news_news = preg_split("/<!?--\s*pagebreak\s*-->/i", $data['news_breaks'] == "y" ? nl2br(stripslashes($data['news_extended'] ? $data['news_extended'] : $data['news_news'])) : stripslashes($data['news_extended'] ? $data['news_extended'] : $data['news_news']));
  60. $pagecount = count($news_news);
  61.  
  62. set_title($news_subject." - tomaszowiak.pl");
  63. echo "<!--news_pre_readmore--><section class='news-more'>";
  64. render_news_more($news_subject, $news_news[$_GET['rowstart']], $news_info);
  65. echo "<!--news_sub_readmore-->";
  66. if ($pagecount > 1) {
  67. echo "<div align='center' style='margin-top:5px;'>\n".makepagenav($_GET['rowstart'], 1, $pagecount, 3, FUSION_SELF."?readmore=".$_GET['readmore']."&amp;")."\n</div>\n";
  68. }
  69.  
  70.  
  71. if ($data['news_allow_comments']) { showcomments("N", DB_NEWS, "news_id", $_GET['readmore'], FUSION_SELF."?readmore=".$_GET['readmore']); }
  72. // if ($data['news_allow_ratings']) { showratings("N", $_GET['readmore'], FUSION_SELF."?readmore=".$_GET['readmore']); }
  73. echo "</section>";
  74.  
  75. } else {
  76.  
  77. redirect(FUSION_SELF);
  78.  
  79. }
  80.  
  81.  
  82. }
  83.  
  84. require_once THEMES."templates/footer.php";
  85.  
  86. ?>


Z tym że tutaj (w powyższym) aby page navigation działo poprawnie musiałem utworzyć dodatkowy plik php, określając w zapytaniu kategorie rekordów.

Chciałbym natomiast połączyć oba pliki jakoś w jeden i zamiast robić osobne pliki php dla każdej kategorii , chcę aby wystarczał tylko jeden.
Np URL wyglądałby w następujący sposób: http://tomaszowiak.pl/news_cats.php?cat_id=1?rowstart=3
patwoj98
URL tak nie może wyglądać, musiałby wyglądać: http://tomaszowiak.pl/news_cats.php?cat_id=1&rowstart=3
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.