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.phpMamy 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=1W 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=1Ograniczył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...
112Teraz 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):
if (isset($_GET['cat_id']) && isnum
($_GET['cat_id'])) {
<?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;
if (isset($_GET['cat_id']) && isnum
($_GET['cat_id'])) { $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);
$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'");
...
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 {
echo "kat = 0 ".$locale['403']."<br />\n"; echo "<strong>".$locale['401']."</strong> <p>$rows</p>\n"; }
$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"); while ($data2 = dbarray($result2)) {
echo THEME_BULLET
." <a href='news.php?readmore=".$data2['news_id']."'>".$data2['news_subject']."</a><br />\n"; }
echo "".THEME_BULLET
." <a href='".FUSION_SELF
."'>".$locale['406']."</a>"; echo "<!--sub_news_cat-->\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:
if (!isset($_GET['rowstart']) || !isnum
($_GET['rowstart'])) { $_GET['rowstart'] = 0; }
<?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']);
if (!isset($_GET['readmore']) || !isnum
($_GET['readmore'])) { $rows = dbcount(
"(news_id)",
DB_NEWS,
groupaccess
('news_visibility')." AND (news_start='0'||news_start<=".time().") AND (news_end='0'||news_end>=".time().") AND news_draft='0' AND news_cat='".$cat."'"
);
if (!isset($_GET['rowstart']) || !isnum
($_GET['rowstart'])) { $_GET['rowstart'] = 0; }
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']);
echo "<div style='text-align:center'><br />\n".$locale['global_078']."<br /><br />\n</div>\n"; closetable();
}
} else {
if (!isset($_GET['rowstart']) || !isnum
($_GET['rowstart'])) { $_GET['rowstart'] = 0; }
...
if (dbrows($result)) {
include INCLUDES."comments_include.php";
// include INCLUDES."ratings_include.php";
$data = dbarray($result);
if (!isset($_POST['post_comment']) && !isset($_POST['post_rating'])) { $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'])); $pagecount = count($news_news);
set_title($news_subject." - tomaszowiak.pl");
echo "<!--news_pre_readmore--><section class='news-more'>"; render_news_more($news_subject, $news_news[$_GET['rowstart']], $news_info);
echo "<!--news_sub_readmore-->"; 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