Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Brak ID w adresie
Forum PHP.pl > Forum > PHP
maateusz
Witam,

Zastanawia mnie już od dawna pewna sprawa,

Rozważmy pewien adres strony, np.
http://adres.pl/buty-ride-orion-white

pomińmy już tu kwestię mod_rewrite.

powiedzmy, że jest to sklep internetowy, teraz moje pytanie dotyczy tego.. jak kod odpowiedzialny za pobranie danych odpowiedniego artykułu wie, że ma pobrać dane tego a nie innego artykułu, zważając, że w nazwie strony jest tylko nazwa artykułu a brak jego identyfikatora?

Albo inny przykład bodajże na Wordpress'ie widziałem odwołanie do artykułów po ich nazwie, żadnego identyfikatora w adresie, czy podczas powiedzmy dodawania nowego artykułu tworzony jest identyfikator który jest jego nazwą, tylko zastanawia mnie teraz jedno, bo powiedzmy, że tak jest, tylko jak zapewnić niepowtarzalność takich identyfikatorów tekstowych, gdyż przy dodawaniu nowego artykułu musiałbym sprawdzać czy taki identyfikator istnieje, jeżeli tak jest to wtedy dodawać powiedzmy jakąś cyferkę do nazwy, znowu sprawdzać czy go nie ma i tak aż do momentu gdy znajdę jakiś wolny, prawdopodobieństwo tego, że artykuł będzie już istniał jakieś jest, a są to dodatkowe zapytania, jak to się wszystko dzieje?
fleshgrinder
Rolę identyfikatora spełnia tu właśnie "buty-ride-orion-white". W bazie masz dodatkową kolumnę, którą zazwyczaj nazywa się "slug", a w niej to, co znajdzie się w pasku adresu. Później zamiast po id elementu wyszukujesz po zawartości tej kolumny. Ot i cała filozofia smile.gif

Odrobinę bardziej kłopotliwe rozwiązanie, niż id (trzeba zapewnić niepowtarzalność slugów), ale zdecydowanie bardziej przyjazne wyszukiwarkom i użytkownikom (zerknięcie na adres i mniej więcej wiadomo gdzie się jest). W większych serwisach można zastosować pewien kompromis, bo wyszukiwanie po łańcuchach znaków jest wolniejsze niż po id, dlatego warto rozważyć adres w formie http://adres.pl/buty-ride-orion-white,20 gdzie po przecinku jest id elementu i po nim wyszukujemy, ale nadal generowany jest slug.

d3ut3r
Można to rozwiązać mniej więcej tak że podczas zapisywania jakiegoś zasobu (artykuł, produkt, cokolwiek) tworzysz jego alias czyli tytuł bez znaków spacji itp i np tworzysz artykuł "Jak napisać program w C" system tworzy alias "jak_napisac_program_w_c" później tylko analizujesz zapytanie i sprawdzasz co to za alias user wpisał i co z nim zrobić.
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.