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:
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):
<?php require_once "maincore.php"; require_once THEMES."templates/header.php"; include LOCALE.LOCALESET."news_cats.php"; add_to_title($locale['global_200'].$locale['400']); $items_per_page = 3; $res = 0; $result = dbquery("SELECT news_cat_name FROM ".DB_NEWS_CATS." WHERE news_cat_id='".$_GET['cat_id']."'"); if (dbrows($result) || $_GET['cat_id'] == 0) { $data = dbarray($result); ... 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"; } else { } while ($data2 = dbarray($result2)) { echo THEME_BULLET." <a href='news.php?readmore=".$data2['news_id']."'>".$data2['news_subject']."</a><br />\n"; } } } if (!$res) { redirect(FUSION_SELF); } closetable(); } else { ... } require_once THEMES."templates/footer.php"; ?>
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:
<?php require_once "maincore.php"; require_once THEMES."templates/header.php"; $i = 0; $cat = "2"; $cat_name = "Na sygnale"; $items_per_page = $settings['newsperpage']; add_to_title($locale['global_200'].$locale['global_077']); $rows = dbcount( "(news_id)", DB_NEWS, AND news_draft='0' AND news_cat='".$cat."'" ); if ($rows) { ... 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"; } else { opentable($locale['global_077']); closetable(); } } else { ... if (dbrows($result)) { include INCLUDES."comments_include.php"; // include INCLUDES."ratings_include.php"; $data = dbarray($result); $result2 = dbquery("UPDATE ".DB_NEWS." SET news_reads=news_reads+1 WHERE news_id='".$_GET['readmore']."'"); $data['news_reads']++; } $news_cat_image = ""; $news_subject = $data['news_subject']; if ($data['news_image_t1'] && $settings['news_image_readmore'] == "0") { $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>"; } elseif ($data['news_cat_image']) { $news_cat_image = "<img src='".get_image("nc_".$data['news_cat_name'])."' alt='".$data['news_cat_name']."' />"; } $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'])); set_title($news_subject." - tomaszowiak.pl"); render_news_more($news_subject, $news_news[$_GET['rowstart']], $news_info); if ($pagecount > 1) { echo "<div align='center' style='margin-top:5px;'>\n".makepagenav($_GET['rowstart'], 1, $pagecount, 3, FUSION_SELF."?readmore=".$_GET['readmore']."&")."\n</div>\n"; } if ($data['news_allow_comments']) { showcomments("N", DB_NEWS, "news_id", $_GET['readmore'], FUSION_SELF."?readmore=".$_GET['readmore']); } // if ($data['news_allow_ratings']) { showratings("N", $_GET['readmore'], FUSION_SELF."?readmore=".$_GET['readmore']); } } else { redirect(FUSION_SELF); } } require_once THEMES."templates/footer.php"; ?>
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