Skocz do zawartości

mod_rewrite - adres w stylu dmoza


ironman

Rekomendowane odpowiedzi

Witam.

Waslnei zaczlem pisac sowj katalog (php+mysql+smarty) i juz na pocztaku natpotkalem problem:

Chce aby linki mialy postac:

www.domena.pl/Kategoria/Podkategoria/Podpodkategoria ....itd

I zorbic aby skrypt gernerowal takie linki to nie problem.

Ale za to problemem jest jak napisac .htaccessa oraz jak sie odlowywac do ID kategorii w ktorej jestesmy w PHP - bo jak pisalem zadnej liczby w linku nie bedzie ???

Z gory dzieki za pomoc.

Odnośnik do komentarza
Udostępnij na innych stronach

Witam.

Ok juz sobie z tym poradzilem (tzn wykorzystalem kawalek kodu znalezionego w necie).

function request_uri() {

if ($_SERVER['REQUEST_URI'])

return $_SERVER['REQUEST_URI'];

}

function get_category($uri = NULL) {

global $db;

if ($uri != NULL) {

$uri = parse_url($uri);

$query = $uri['query'];

$path = $uri['path'];

parse_str($query, $vars);

if (isset ($vars['c']))

$cid = $vars['c'];

} else {

if (isset ($_REQUEST['c']))

$cid = $_REQUEST['c'];

$path = request_uri();

}

$id = 0;

if (!isset ($cid)) {

$path = split('/', $path);

$id = 0;

foreach ($path as $cat) {

if (!empty ($cat))

$id = $db->get_row("SELECT cid FROM catalog_cat WHERE title_url = '$cat'");

}

}

return $id ? $id : '0';

}

$id = get_category(); //tu otrzymuje Id kategorii

I teraz tak: jak zabezpieczyc ten kod przed SQL_injection i innymi wlamaniami ??

Z gory dzieki za pomoc

Odnośnik do komentarza
Udostępnij na innych stronach

Po co aż tyle zapytań generować? Zamiast tej pętli pytałbym o ostatnią kategotrię. Zakładam, że w bazie masz jakoś zapisane która kategoria jest rodzicem dla innej. Proponuje model "Lewa Prawa" :) wtedy w jednym zapytaniu mamy całą ścieżkę.

Aprzy obecnym kodzie zabezpieczenie widzę jedno aby dodać slashe na wszelki wypadek

if (!get_magic_quotes_gpc()) {

$cat = addslashes($cat);

}

Odnośnik do komentarza
Udostępnij na innych stronach

Witam.

Dziekuje za odpowiedz.

Tak oczywice w tabeli z kategoriami mam pole CID, Parent, Title, Title_url

I mam jeszcze prosbe bo Pan pisze ze da sie to bardziej ekonominicznie zrobic - czy moiglby Pan tu wrzucic kawalek kodu ?

Z gory dzieki za pomoc.

PS. A tak wogole to mam problem jak pozliczac linki w danych kategoriach moze ma ktos jakis ekonominczy i sprawdzony kodzik ?

Odnośnik do komentarza
Udostępnij na innych stronach

Żaden Pan. Wiem, że stara jestem ale jest tu kilku starszych.

.htaccess

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/[A-Z]{1}.*
RewriteRule ^(.*)$   /index.php?argumenty=$1 [PT]

To bedzie dzialalo tylko wtedy jesli pierwsza czesc linku bedzie zaczynala sie z duzej litery

czyli zadziala dla domena.pl/Test/

ale nie zadziala dla domena.pl/test/

czyli musisz pameitac aby zdjecia i inne pliki graficzne, css etc umeiscic w katalogu z malej litery

w pliku index.php umiesc cos takiego:

$argumenty = explode('/',trim($_GET['argumenty'],'/'));
$ostatni = $argumenty[count($argumenty)];


if (!get_magic_quotes_gpc()) {
$kategoria = addslashes($ostatni);
}
//pytanie do bazy
$id = $db->get_row("SELECT cid FROM catalog_cat WHERE title_url = '$kategoria'");

Tylko tak - tutaj nie wyciagamy sciezki - neiwiem czy CI jest potrzebna - nie mam pojecia co dalej chcesz robic

Przeczytaj to https://www.sitepoint.com/article/hierarchical-data-database a mzoe bedziesz chcial przebudowac strukture bazy aby ulatwic sobie hierarchizacje kategorii.

ironman: co do zliczenia produktow zalezy wszystko od struktury bazy

1. 3 tabele

wpisy

wpisy_id

wpisy_adres

kategorie

kategorie_id

kategorie_nazwa

kategorie_rodzic

kategorieDoWpisow

kategorie_id

wpisy_id

gdzie w tej 3ciej tabeli masz przyporzadkowanie wpisu do kategorii - z tym ze w dany wpis moze byc w wielu kategoriach

ile wpisow jest w kategorii ?

SELECT COUNT(*) FROM kategorieDoWpisow WHERE kategorie_id = xxx

2. 2 tabele

wpisy

wpisy_id

wpisy_adres

kategorie_id

kategorie

kategorie_id

kategorie_nazwa

kategorie_rodzic

tutaj kazdy wpis jest juz przyporzadkowany do danej kategorii

ile wpisow jest w kategorii ?

SELECT COUNT(*) FROM wpisy WHERE kategorie_id = xxx

(musisz miec indeks nalzoony na pole kategorie_id)

Odnośnik do komentarza
Udostępnij na innych stronach

Witam.

Bardzo dzikei ze poswieciles troche czasu aby mi odpowiedziec.

Jesli chodzi o wyciganiecie libczy produktow (linkow) z danej kategorii to nie jest to dla mnie problem - ale jest to juz problem jak dana kategoria ma podaktegorie do ktrocyh naleza tez jakies linki.

Wtedy wyswietlajac nazwe danej glownej kategorii che kolo niej anpisac libcze linkow - ale nie tylko linkow nalezacych do tej glownej kategorii ale takze do nizszych kategorii.

Rozumiesz chyba o co mi chodzi ?

A w tym wlasnie mam problem.

Czyli wyswietlajaca nazwe glownej kategorii i zliczajac linki od niej nalezace musimy tez sprawdzic czy ta kategoria ma podkategorie a te podkategoire maja jeszcze kolejne podaktegorie, a jesli ma to musimy zliczyc wszytkie te linki - a z tym mam baaaaardzo duzy problem.

Z gory dzieki za pomoc

Pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

Dlatego by przydal Ci sie model bazy podany w linku.

Teraz w modelu rodzic dziecko musialbys dojsc rekursywnie kto jest kogo rodzicem. Chyba ze robimy tak jak masz ze ufasz klientowi ze nei ruszy adresu w linku i na podstawie nazw kategorii tam zawartych policzymy.

Wklej mi tutaj strukture tabeli wpisow i kategorii

A i ostrzegam - lepiej przy duzej ilosci wpisow (kilkadziesiat, czy kilkaset tysiecy) i przy pdpowiednio duzej liczbie kategorii odpalic jedna kwerende w cron zeby co pol h wykonuwala zapytanie przeliczania i w odpowiedniej kategorii wpisywala sume linkkow z kategorii i podkategorii - przy modelu lewa prawa i relacji kategorii do wpisow w osobnej tabeli takie zapytanie moze wygladac:

przykald w perlu

sub zliczanie_kategorii() {
#zliczenie ilosci stron w kazdej kategorii i sumuje te ilosci dla wszystkich podkategorii

my $sth1 = $dbh->prepare('SELECT a.Kategorie_Id,COUNT(c.Katalog_Id) FROM katwww_Kategorie AS a LEFT JOIN katwww_Kategorie AS b ON b.Kategorie_Lewa BETWEEN a.Kategorie_Lewa AND a.Kategorie_Prawa LEFT JOIN katwww_KategorieDoKatalogu AS c ON c.Kategorie_Id = b.Kategorie_Id GROUP BY a.Kategorie_Id ORDER BY a.Kategorie_Lewa');
$sth1->execute();
while (my ($Id,$Ilosc) = $sth1->fetchrow) {
  $dbh->do("UPDATE katwww_Kategorie SET Kategorie_Ilosc = $Ilosc WHERE Kategorie_Id = $Id");
}
}

Odnośnik do komentarza
Udostępnij na innych stronach

Witam.

W tej chiwli doszle do wniosku ze dodaja do katalgou sotrne bede beda zwiekszal liczbe stron dla danej aktegorii w polu kategorii w baize- dodam tutaj jedno dodatkowe pole - ilosc sotrn w danej kategorii.

tylko ze jak kategoria ma podkategorie to nei wiem jak to polizcac aby przy glownej kateogrii byla liczby = "liczba sotrn w obecnej kategorii+ liczba sotrn w podaktegoriach i tak dalej ). ????

Z gory dzieki za pomoc

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności