Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]Przyjazne linki
Forum PHP.pl > Forum > PHP > Frameworki
Gribo
Witam mam zamiar zaimplementowac w swoim projekcie "przyjazne linki". Mianowicie chcę by zamiast takiego adresu mojestrona.com/artukuły/id było mojestrona.com/artukuły/tytuł_artykułu

znalazłem rozwiązanie w manualu do Symfony mianowicie chodzi mi o :
http://www.symfony-project.org/tutorial/1_2/my-first-project Dział Change the URL format

Jednak biorąc pod uwagę że w bazie będzie większa ilość artykułów to ten sposób wydaje się mało wydajny. Wiem że można tez zrobić to stosując Route Class no ale tu by trzeba oprócz tytułu dać przynajmniej id artykułu. I teraz moje pytanie jak optymalnie zrobić takie adresy jakie chcę ?
Przychodzi mi na myśl jakaś dodatkowa kolumna w tabeli która by zawierała slug z tytułu.

Jakie wy stosujecie rozwiązania ?
destroyerr
To co Ty nazywasz slug tam jest nazwane stripped title. Cała różnica, więc wydajność jest taka sama.

Jeśli chodzi o wydajność, to można optymalizować (oczywiście jeśli to konieczne) to w sposób następujący:
tworzysz w Twojej tabeli dodatkowe pole typu char, o długości np. 40. Do tego pola będzie trafiać tytuł potraktowany funkcją haszującą (np. sha1, stąd długość pola). Dalej już chyba wszystko jasne.
Gribo
A czy to jest dobre rozwiązanie te z dodawaniem wierszy stripped title do tabel gdzie potrzeba ? Czy może istnieje jescze jakieś wyjście ?
phpion
Ja stosuję rozwiązanie pośrednie tj. linki postaci:
mojestrona.com/artukuły/123/tytuł_artykułu
gdzie 123 to id artykułu. Dodanie cyferek nie wpływa w dużym stopniu na wygląd adresu, a umożliwia wyszukiwanie artykułu bezpośrednio po kluczu głównym. Przy takim podejściu nie musisz nawet trzymać "tytul_artyukulu" w bazie danych - możesz go tworzyć na bieżąco. Jest tylko jeden drobny problem. Linki:
mojestrona.com/artukuły/123/tytuł_artykułu
mojestrona.com/artukuły/123/sraka_praptaka
zaprowadzą nas w to samo miejsce. Rozwiązaniem jest sprawdzenie czy "tytul_artykulu" faktycznie odpowiada odpowiednio przerobionemu "Tytuł artykułu".
Gribo
w tej chwili korzystam z tej formy linków ale nie jest to zbyt dobre bo zaużmy chce zrobic taki link

strona.com/zielona_gora/aktualnosci/temat_wiadomosci/

i teraz by takie coś zrobić potrzebować będę 2 id , miasta i wiadomości co już nie ładnie wygląda. tym bardziej ze jak koles wykasuje przypuśćmy kawałek adresu i zostawi tylko strona.com/zielona_gora/ to już nie będzie działać
athabus
Cytat(Gribo @ 3.08.2009, 21:16:03 ) *
w tej chwili korzystam z tej formy linków ale nie jest to zbyt dobre bo zaużmy chce zrobic taki link

Mam nadzieję, że to tylko palec ci się osunął ;-)

Co do tematu, to slug/stripped title (jak zwał tak zwał) przechowywany w bazie, to najlepsze wyjście w tej sytuacji.
Id w adresie ma jeden duży plus, tj. gdy zmieniasz tytuły, to link będzie zawsze działał. Oczywiście warto wtedy zrobić przekierowania na odpowiedni adres albo chociaż użyć odpowiedniego metatagu, żeby nie dostać DC od Googla. Z drugiej strony psuje jednak trochę wygląd adresu.

Ja często robię tak, że mam adres "slug_id" czyli np. produkt/nazwa-produktu_id i w kontrolerze szukam produktu po id i potem sprawdzam czy slug się zgadza. Jeśli nie to robię przekierowanie 301 na właściwy adres. Dzięki temu stare linki będą działały nawet po zmianie adresu.

Co do wydajności szukania po slugu, to o ile tych artykułów nie będzie naprawdę dużo (np. 50.000) to wydajnością nie ma sensu się przejmować. Wyszukiwanie po liczbach jest szybsze niż po słowach, ale przy małych zbiorach różnica jest niezauważalna.
Gribo
o to mi chodziło wielkie dzięki za upewnienie mnie co do tego rozwiązania
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.