Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: NiceURL w MVC ?
Forum PHP.pl > Forum > PHP > Object-oriented programming
zembi1991
Witam,
niedawno postanowilem sie troche podszkolic w programowaniu obiektowym i napisac aplikacje wykorzystujac MVC, troche glowkowalem i wszystko jakos ogarnalem, chodiz fajnie... z tym ze nie chce pozniej sie bawic w tworzenie przyjaznych URL-i gdy juz wszystko bedize gotowe... wiec postanowilem to zrobic teraz, zanim stworze cala strukture podstron...

W kazdym razie przejdzmy do wlasciwego problemu, jak mi wiadomo gdy opieramy sie na MVC wywolanie jakiejs akcji tudziez podstrony polega na podaniu kontrollera i pozniej opcjonalnie akcji i ewentualnie dodatkowych parametrow. a wiec np. jezeli na stronie chcialbym wyswietlic jakas kategorie, wyciagana z bazy, URL wygladal by mniej wiecej tak : "?controller=kategorie&action=pokaz&kat=agd" w takim przypadku stworzenie przyjaznych linkow w formie "/kategorie/pokaz/agd/" nie jest problemem... jednak zalezalo by mi, jezeli jest to mozliwe wogole, aby link mial postac duzo prostsza... a mianowicie nie pokazywal kontrollera i akcji, a bezposrednio kategorie: "/agd/" . Wydaje mi sie ze bylo by to dobre rozwiazanie, zwlaszcza gdyby w linku byla kategoria i podkategoria, nie mowiac jzu o przypadku gdyby ich nazwy skladaly sie z kilku slow, gdyby do tego jeszcze dorzucic nazwe kontrolera i akcji, link moglby urosnac do zbyt duzych rozmiarow....

a wiec moje pytanie brzmi, czy jest taka mozliwosc? bo nie moge wymyslic, jak w takim razie router rozpoznal by ktory kontroller i ktora akcje ma odpalic...
dr_bonzo
Cytat
URL wygladal by mniej wiecej tak : "?controller=kategorie&action=pokaz&kat=agd" w takim przypadku stworzenie przyjaznych linkow w formie "/kategorie/pokaz/agd/" nie jest problemem... jednak zalezalo by mi, jezeli jest to mozliwe wogole, aby link mial postac duzo prostsza... a mianowicie nie pokazywal kontrollera i akcji, a bezposrednio kategorie: "/agd/"


Robisz mapę URLi
"/agd/" => array( controler => 'kategorie', action=>'pokaz', kat => 321 );

i jesli dopasujesz URL wywowalania domappingu to odpalasz kontroler wskazany w mappingu. Jesli nie ma to szukasz kontrolera wg URL'a - tutaj kontroler nazywal by sie 'agd'.

To wstęp do rozwiązania - przed tobą wiele problemów zeby to zaimplementować poprawine smile.gif
zembi1991
hmm.. nie bardzo rozumiem jak by to mialo dzialac ;( ale przyszla mi pewna mysl do glowy... narazie rozpoznaje kontroller akcje itd, w ten sposob iz zapisuje do tablicy wlasnej tablice parametrow Get, nastepnie za pomoca array_shift wyciagam z niej pokolei kontroller akcje i reszte przypisuje do parametrow winksmiley.jpg czy dobrym sposobem byloby na poczatku sprawdzenie czy 1 wartosc (domyslnei kontroller) istnieje, jezeli nie to teraz wyswietlam blad 404, jednak moglbym przed jego wyswietleniem sprawdzic czy ta wartosc nie jest przypadkiem kategoria i wtedy przy spelnieniu takeigo warunku kontroller ustawial bym na sztywno na (nawiazujac do przykladu) "kategorie". co myslicie o tkaim rozwiazaniu.?
dr_bonzo
Ja to robie przed zbudowaniem kontrolera. Jako plugin dispatchera.

Odczytuję routerem URL.
Szukam Nice URLi pasujących do URLa.

Jeśli istnieje taki to: Plugin je przerabia, z /kuchnie/agd na /produkty/z_kategorii/123.
Teraz jest odpalana akcja "z_kategorii" w kontrolerze "produkty".

Jeśli nie istnieje to proboje odpalic akcje "/kuchnie/agd" - akcja "agd" w kontrolerze "kuchnie" - oczywiscie 404 jesli kontroler/akcja nie istnieje.

Najwazniejszy jest tu mapping URLi do kontrolera/akcji/id.
Pilsener
Najlepiej przyjąć, że:
- wszystkie żądania wysyłamy do /index.php
- standardem są nice_url
- mamy routing standardowy, który ma postać np:
strona.pl/moduł/kontroler/akcja/param1/val1/param2/val2

Jeśli z jakiś powodów nice_url off, to link wygląda tak:
strona.pl/index.php?page=moduł/kontroler/akcja/param1/val1/param2/val2
Tu moim zdaniem nie warto bawić się w module=moduł&controller=kontroler itd. Nice są standardem a tradycyjne linki sytuacją awaryjną, ułatwia nam to imlementację i mamy tylko jedną uniwersalną regułę w .htaccess

Linki generujemy jakąś funkcją typu:
  1. echo $this->url(array('module'=>'moduł','controller'=>'kontroler','param1'=>'value1'),$parametry);
- w parametrach decydujemy, czy link ma np. zapamiętywać zmienne z adresu, którego routingu użyć (możemy używać wszak niestandardowych), czy link ma być przyjazny czy nie i tak dalej

Samo okodowanie tego także jest proste, wystarczy klasa powiedzmy "router" parsująca adres, schody zaczynają się dopiero przy niestandardowych routingach, dlatego tu znów warto rozbudować standardowy router o takie założenia jak:
- znak / oddziela kontroler, akcję moduł itd.
- znak ; słowa kluczowe
- znak , parametry
- znak - numer strony

Najlepsza oczywiście jest jedna, spójna koncepcja i jeden routing - niestandardowe przydają się, gdy trzeba dodać zewnętrzną aplikację jako moduł, zachować kompatybilność wsteczną linków i tak dalej.
Crozin
Wątek nie ma de facto nic wspólnego z samym wzorcem MVC - określenie parametrów żądania to zadanie routera. Bardzo proste, a jednocześnie dosyć wszechstrone rozwiązanie to wspomniana przez dr_bonzo mapa wzorców. Definiujesz sobie wszystkie "wzorce" URLi w postaci wyrażeń regularnych, dodajesz do nich jakieś domyślne parametry (jeżeli potrzeba). Każda reguła musi Ci zwrócić zawsze minimum dwie informacje: nazwy kontrolera i akcji.

Mapa może mieć przykładowo postać:
Kod
produkt:
  wzór: #^/produkt/(?<id>\d+)/(?<nazwa>[\w-]+)\.html$#
  domyślne-parametry: kontroler: produkt, akcja: pokaż

strona-główna:
  wzór: #^/$#
  domyślne-parametry: kontroler: głowna, akcja: pokaż
Określenie paramterów żądania sprowadza się teraz do sprawdzenia czy REQUEST_URI pasuje do wzoru - jeżeli nie sprawdzamy kolejny aż do 404.
dr_bonzo
@Crozin - nie o taką mapę mi chodziło - ty prezentujesz "konfigurację routingu" (obecna w Symfony, RoR, etc.).

Mi chodzilo o doslowne zmapowanie /komputery/apple/macbook.html -> { kontroler: product , akcja: show , id : 123 }

I widzisz URL - > szukasz czy ma mapowanie - jak tak to "przepisujesz" url na /product/show/123 i odpalasz odpowidni kontroler i akcję
wiiir
poniewaz aktualnie siadlem do pisania cms, ja mam taki pomysl. U mnie kazda strona tj. arktykuly itd bedzie tworzyl uzytkownik (wiadoma sprawa) w momencie tworzenia bedzie musial zdefiniowac typ dokumentu (czyli jaki modul bedzie za to odpowiedzialny), zostanie mu nadany jakis id dokumentu, wiec juz teraz jestem w stanie okreslic link do tego dokumentu i powiedzmy ze ma on taka forme /index.php?kontroler=artykul&id=20. Cos takiego zapisuje do bazy w tabeli np linki. Oczywiscie sa tam kolumny ktore definiuja nasz nice url np artykul/20 oraz prawdziwy url i inne rzeczy smile.gif

Nastepnie robie sobie clase ktora pobiera mi wszystkie dane z tabli linki odszukuje co trzeba w wynikach odpowiednimi metodami clasy i znam prawidlowy url z ktorego latwo moge wyciagnac typ kontrolera i id z tego artykul/20 bedzie ciezko ale z tego kontroler=artykul&id=20 juz nie ... robimy explode po & i mamy 2 parametry smile.gif

Oczywiscie jest to wszystko bardzo uproszczone ale jak widac mozna to latwo rozbudowac dodajac jakies np jakis task, option itd

Co moge jeszcze dodac to jest to, ze gdy ktos bedzie nam wpisywac jakies scierwo do urla np pod id to nie bedzie tego w zapytaniu ktory szuka id podanym w url, poniewaz wszystkie dane bede mial pobrane niezaleznie od tego co jest w url-u pozniej wystarczy jak pisalem odnalesc szukany przez nas link i okreslic co trzeba uruchomic..

Daje ci to przewage nad tym ze nie musisz definiowac wszystkich mozliwych wzorcow tylko jeden i kazdy odnosi sie do index.php i to jest moim zdaniem najlepsze rozwiazanie
Pilsener
To co napisałeś to jakiś koszmar, mam utworzyć adres, wrzucać go do bazy a potem pobierać z bazy by wyciągać z niego zmienne explodem? sciana.gif Pomijając nawet kwestie wydajności, wygody czy SEO jest to rozwiązanie absurdalne z n powodów.
wiiir
Cytat(Pilsener @ 8.09.2010, 09:43:15 ) *
To co napisałeś to jakiś koszmar, mam utworzyć adres, wrzucać go do bazy a potem pobierać z bazy by wyciągać z niego zmienne explodem? sciana.gif Pomijając nawet kwestie wydajności, wygody czy SEO jest to rozwiązanie absurdalne z n powodów.


No przeciez i tak trzymasz w bazie wszystko lol...... odpowiedz mi na pytanie jak generujesz menu?questionmark.gif? Jesli masz jakies zakladki jak je generujesz?questionmark.gif Wiec w czym problem dodac jeszcze jedna kolumne i dodac tam nice link i jeszcze jedna kolumne z normalnym likiem. Nie wiem czemu mialoby byc to nie wydajane

Poza tym z tego co wiem do joomla dziala w podobny sposob i jakos wszystko smiga dobrze
Pilsener
Menu generuje normalnie, na podstawie drzewa kategorii podpiętego do tego menu. Linki tworzę tak:
  1. echo tworz_url($zmienne_url,$opcje);
resztę robi system, który generuje linki biorąc pod uwagę zmienne URLowe, zmienne serwerowe, konfigurację, subdomeny, parametry typu czy link ma być nice czy ugly oraz routing - można użyć routingu standardowego lub niestandardowego a w Twoim przypadku trzeba poprawiać wszystkie linki w bazie.

A jak będziesz miał link typu stron.pl/artykuly/fajne;zycie;programisty,345-3.html to już nie zadziała bo to link do strony nr 3 tego artykułu? Dodaj do tego parametry i otrzymasz niemal nieskończenie wiele kombinacji różnych linków, chcesz to trzymać w bazie wszystko? I co mnie interesuje jak jest w dżumli czy innych tego typu skryptach zwanych CMSami, statyczne linki to się robiło gdy człowiek się HTML uczył.

Dzisiaj robi się tak, że wrzucasz tablicę parametrów do widoku i tą samą tablicę odbierasz w kontrolerze, natomiast wygląd linku jest sprawą wtórną i odpowiada za to właśnie routing, który definiujesz sobie w pliku cfg. Dzięki temu programista kompletnie nie musi przejmować się wyglądem linków, ustawię sobie w cfg linki zwykłe to będę miał:
stron.pl/index.php?page=artykuly/fajne;zycie;programisty,345-3.html
linki nice, router standard:
stron.pl/artykuly/fajne;zycie;programisty,345-3.html
albo jakiś routing niestandardowy:
stron.pl/fajne-zycie-programisty;artykuly_345,3.html

Ale zawsze do linku wrzucam id artykułu 345, numer strony 3 i tak dalej a otrzymuję to samo w kontrolerze. Jak ktoś zna lepszy sposób to flaszkę stawiam. Już się w życiu statycznych linków naprzepisywałem trochę, widziałem też po kilkaset reguł w .htaccess.
wiiir
Tyle ze moim przypadku moge zrobic sobie np
  1. strona.pl/to-jest-kolejny-post

i np bedzie oznaczac to jakis artykul oraz moge zrobic tak
  1. strona.pl/zaraz-napisze-kolejny-post

i to juz bedzie oznaczac strone rejestracji, oczywiscie nic nam nie mowi ze bedzie to rejestracja

Do tego u ciebie w funkcji routujacej musisz (jak zakladam) trzymac sie pewnych regol,
czyli badac czy jakas sekcja istnieje, jesli tak co jaka jest jej wartosc
np musisz zastasowac jakies znaki oddzielajace poszczegolne sekcje

ja nie musze bo wiem ze to nizej
  1. strona.pl/dodaj-nowy-post

oznacza np component = com_art, option = new
i uruchamiam co trzeba
co mogloby byc jednoznaczne z tym zapisem
  1. strona.pl/aktykuly/nowy-post
  2. strona.pl/aktykuly;nowy-post.html


a jak bede chcial zastosowac normalne linki to bede mial
  1. strona.pl/index.php?component=com_art&option=new


wiec kto mowi ze te linki sa statyczne jak wyswietlac moge cokolwiek (bo nie musze trzymac sie zadnego schematu) i uruchamiac to co musi zostac uruchomione
Pilsener
  1. strona.pl/to-jest-kolejny-post
- a jak ktoś doda np. artykuł zawierający identyczny tytuł? Słowa kluczowe są tylko dla SEO, w dodatku szukanie po tekście obciąża bazę, dlatego powszechnie stosuje się ID. A jak ktoś zmieni tytuł artykułu to też musisz to poprawiać w swojej bazie linków - niepraktyczne to.

Cytat
musisz (jak zakladam) trzymac sie pewnych regol
- zgadza się, ale identyczny problem jest u Ciebie przy tworzeniu tych linków, z nieba przecież one nie spadają smile.gif

A przecież linki to nie tylko kategorie/podkategorie serwisu czy artykułu, lecz także paginacja czy wyszukiwarka, parametry czy choćby zdjęcia. Dla każdego zdjęcia będziesz dodawał rekord do swojej bazy linków?

Zresztą chciałbym widzieć, jak to będzie działać, trzymać w bazie oba adresy, ciekawe jak trzeba będzie pozmieniać nazwy zmiennych albo ktoś stwierdzi, że moduł to będzie teraz subdomena bo takie są teraz trendy smile.gif Już poprawiałem plik .htaccess z prawie 400 regułami i męczyłem się w edytorze plików przepisując statyczne linki, jeśli wpadnie mi w łapy baza paru tysięcy linków do zmienienia to przynajmniej będę wiedział, kto za tym stoi smile.gif
dr_bonzo
Cytat
- a jak ktoś doda np. artykuł zawierający identyczny tytuł? Słowa kluczowe są tylko dla SEO, w dodatku szukanie po tekście obciąża bazę, dlatego powszechnie stosuje się ID. A jak ktoś zmieni tytuł artykułu to też musisz to poprawiać w swojej bazie linków - niepraktyczne to.

Nie ma problemu - dobry algorytm tworzacy unikalne URLe (slugi) i po problemie - np dopisanie "_2".


Cytat
A jak ktoś zmieni tytuł artykułu to też musisz to poprawiać w swojej bazie linków - niepraktyczne to.

A to czemu? Albo zostawiasz permalink (nie zmieniasz linka) albo po prostu go aktualizujesz automatycznie.

Cytat
... w dodatku szukanie po tekście obciąża bazę, dlatego powszechnie stosuje się ID.

Marudzenie, jedna prosta SQLka szukająca po varchar(255) z indexem nie jest wcale powolna.

Cytat
A przecież linki to nie tylko kategorie/podkategorie serwisu czy artykułu, lecz także paginacja czy wyszukiwarka, parametry czy choćby zdjęcia. Dla każdego zdjęcia będziesz dodawał rekord do swojej bazy linków?


A po co? Paginacja i szukarka operuje na QUERY_STRINGu /komputery/laptopy/sony.hmyl?page=3&procesor=1
Nice URL patrzy na URL przed "?" i po problemie.


Cytat
ciekawe jak trzeba będzie pozmieniać nazwy zmiennych albo ktoś stwierdzi, że moduł to będzie teraz subdomena bo takie są teraz trendy

Zakładasz duże prawdopodobieństwo zrobienia subdomeny jako modułu, a nisko oceniasz wymaganie klienta aby linki np. w sklepie były bez żadnego ID?
wiiir
Cytat(Pilsener @ 8.09.2010, 19:42:52 ) *
Zresztą chciałbym widzieć, jak to będzie działać, trzymać w bazie oba adresy, ciekawe jak trzeba będzie pozmieniać nazwy zmiennych albo ktoś stwierdzi, że moduł to będzie teraz subdomena bo takie są teraz trendy smile.gif Już poprawiałem plik .htaccess z prawie 400 regułami i męczyłem się w edytorze plików przepisując statyczne linki, jeśli wpadnie mi w łapy baza paru tysięcy linków do zmienienia to przynajmniej będę wiedział, kto za tym stoi smile.gif

sek w tym ze potrzeba mi tylko 1 reguly
RewriteRule ^(.*)$ index.php

co do paginacji to juz padla odpowiedz ale:
Kod
http://strona.pl/strona/aktykul/podartykul/sdfsdfsdf.html?search=szukana_fraza&ordering=#1

jak uzyjesz parse_url() to jest bardzo latwo odczytac calosc nie trzeba robic za duzo, tym bardziej ze mam juz podane drzewo do ktore moge sobie wyswietlnic na stronie:

Home -> strona -> aktykul ->podartykul

w podanym przykladzie masz strone wyszukiwarki gdzie w query string znajdziesz szukana fraze, typ sortowania a po"#" (czyli fragment) numer strony

a to oznacza ze dalszym ciagu nie musze sie trzymac schamatu

Co do takich samych nazw bardzo prosta sprawa robisz jakis unikalny id i artykul juz ma alias 3123_to-jest-jakis-post i otrzymujesz dodatkowy atut (jak podales) szukanie po id, w dalszym ciagu daje mi mozliwosc pisania linku bez schematow z 1 regula w htaccess

jeszcze mi sie przypomnialo ze przeciez propo query string to jest przeciez parse_str wiec nie trzeba zadnego explode
Pilsener
Cytat
A po co? Paginacja i szukarka operuje na QUERY_STRINGu /komputery/laptopy/sony.hmyl?page=3&procesor=1
Nice URL patrzy na URL przed "?" i po problemie.
- i doklejony po "?" numer strony już nie wygląda ładnie. I kto ma określać gdzie, kiedy kończy się nice url a zaczyna "?"? Co trzymać w niceurl i bazie a co nie? I jak tworzymy takie linki? Pobieramy nice url z bazy a query string doklejamy?

I wcale nie marudzę, każdy robi jak chce ale Wasz sposób wydaje się mieć zbyt dużo wad:
- dodatkowe zapytania mysql i wzrost transferu z bazy
- algorytm sprawdzający unikalność URLi
- obsługa URLi w bazie
- słaba elastyczność, niska odporność na zmiany i modyfikacje, ciężko dodać zewnętrzną aplikację jako moduł bez pełnej integracji

U mnie jest tylko:
- algorytm generujący nice URLe
- algorytm odczytujący URLe

U Was bardziej rozbudowane będzie generowanie URLi a u mnie odczyt (dochodzi routing).

Cytat
wymaganie klienta aby linki np. w sklepie były bez żadnego ID
- wtedy musimy zrobić unikalny title (lub id oparty o title) i na jego podstawie pobierać treść z bazy, problemu tu nie widzę.

Po mojemu to Wasz sposób jest mało elegancki (widać zmienne np. w paginatorze czy galerii zdjęć) a w dodatku trudniejszy w programowaniu. Standardowy router wrzucający zmienne do tablicy na podstawie znaków typu -;, to przecież żadna czarna magia.
dr_bonzo
Cytat
Po mojemu to Wasz sposób jest mało elegancki (widać zmienne np. w paginatorze czy galerii zdjęć) a w dodatku trudniejszy w programowaniu

A u ciebie nie widac? Masz linki typu "siodma_strona_artykulu_o_ziemniakach.html" ? albo "wyszukiwanie_ziemniakow_warszawa_1990-2000.html" ?


Cytat
i doklejony po "?" numer strony już nie wygląda ładnie. I kto ma określać gdzie, kiedy kończy się nice url a zaczyna "?"?Co trzymać w niceurl i bazie a co nie?


To chyba proste - jest max JEDEN "?" w URLu. parse_url + parse_str i po problemie.
Mielismy wczesniej paginacje jako /komputery/laptopy/sony/3.html ale pozniej dochodzila masa innych parametrow do ograniczania przegladania produktow i nr strony przeszedl do QUERY_STRINGa.

Cytat
I jak tworzymy takie linki? Pobieramy nice url z bazy a query string doklejamy?

W bazie trzymam URL do kategorii produktow, do pojedynczego produktu,itd. Wiec jak mam 3cia strone kategorii to URL do kategorii pobieram z bazy
/komputery/laptopy/sony.html i doklejam "?page=3"

Cytat
- algorytm odczytujący URLe

No to mam pytanie: jak wyglada utworzenie URLa dla produktu sony_vaio_x3 w kategorii /komputery/laptopy/sony ?
Używasz za każdym razem drzewa kategorii?
Pilsener
Cytat
Używasz za każdym razem drzewa kategorii?
- tylko jeśli strona ma być na te słowa pozycjonowana to tak (lub klient się upiera), by wyświetlić daną kategorię czy produkt używam tylko title+id, zresztą przy depth rzędu 4 czy 5-ciu byłoby to kłopotliwe. Najczęściej do adresu wrzucam tylko moduł lub moduł i kontroler albo jak kto woli kategorię/podkategorię, z czego zazwyczaj moduł ładnie umieszczamy w subdomenie np. www.komputery.strona.pl/laptopy/sony_vaio_x3,45,3456.html

Oczywiście trzeba odróżnić, czy jest to strona kategorii czy produktu, np. allegro dodaje "i" z tego co pamiętam (pewnie od item=), tu akurat dodałem dwa ID - pierwsze to gałąź a drugie ID produktu, można też użyć np. średnika - cyfra po średniku to gałąź a po , to ID produktu - to już od nas zależy smile.gif

Jednak z punktu widzenia SEO nie jest dobrze wsadzać słowo "laptopy" jeśli na nie nie pozycjonujemy, można je wywalić całkowicie albo wrzucać na koniec adresu (słowa kluczowe na początku adresu mają większą moc).
wiiir
Cytat(Pilsener @ 9.09.2010, 09:52:17 ) *
- i doklejony po "?" numer strony już nie wygląda ładnie. I kto ma określać gdzie, kiedy kończy się nice url a zaczyna "?"? Co trzymać w niceurl i bazie a co nie? I jak tworzymy takie linki? Pobieramy nice url z bazy a query string doklejamy?

w bazie nie trzymamy nice urli tylko oryginalny url i alias akrykulu czy strony, Czyli tak naprawde nice linkiem moze byc drzewo aliasow /nazwa_podartykulu/nazwa_artykulu
i w tym wypadku (myslac logicznie) jesli artykul wywolujemy z podartykulu mozemy go pozycjonowac wzgledem calego drzewa

Cytat(Pilsener @ 9.09.2010, 09:52:17 ) *
I wcale nie marudzę, każdy robi jak chce ale Wasz sposób wydaje się mieć zbyt dużo wad:
- dodatkowe zapytania mysql i wzrost transferu z bazy
- algorytm sprawdzający unikalność URLi
- obsługa URLi w bazie
- słaba elastyczność, niska odporność na zmiany i modyfikacje, ciężko dodać zewnętrzną aplikację jako moduł bez pełnej integracji


- wcale nie dodatkowe polaczenie, zarowno u mnie jak i u Ciebie musze nawiazac polaczenie i pobrac jakies parametry zeby stowrzyc ten link
- nie jest potrzebny algorytm ktory bedzie sprawdzal bo w momencie jego utrzworzenia mam 100% szansy ze bedzie unikalny
- tego nie rozumiem
- wlasnie wysoka elastycznosc i duza odpornosc na zmiany, ty jak zmienisz algortym ktory generuje linki musisz zmienic algorytm ktory odczytuje linki ja nie musze bo dla mnie jest niewazne jak on wyglada. W moim przypadku musze zmienic routing gdy dodaje kolejna opcje do linka co w towim przypadku tez jest konieczne. Jeszcze niewidzialem aplikacji do ktorej mozna dolaczyc cos co nie jest kompatybilne bo predzej czy pozniej sie wywali badz wogole nie wlaczy.
Pilsener
Cytat
w bazie nie trzymamy nice urli tylko oryginalny url i alias akrykulu czy strony
- no to tak czy inaczej trzeba url generować, określać jak ma wyglądać alias, czego ma alias dotyczyć a czego nie - nie za skomplikowane to się robi? Wychodzi na to, że część nice-urla trzymamy w bazie. Prościej byłoby zapisywać oryginalny link i odczytywać parametry na podstawie ID (widziałem już takie rozwiązanie, adresy był typu strona.pl/234 strona.pl/567 itd. Wystarczy dodać słowa kluczowe)

Cytat
wcale nie dodatkowe polaczenie, zarowno u mnie jak i u Ciebie musze nawiazac polaczenie i pobrac jakies parametry zeby stowrzyc ten link
- nieprawda, u mnie z linku dostajesz od razu tablicę parametrów, u siebie musisz odpytać najpierw bazę by dostać te parametry (no i czy nie lepiej byłoby je trzymać w postaci tablicy zserializowanej?)

Cytat
nie jest potrzebny algorytm ktory bedzie sprawdzal bo w momencie jego utrzworzenia mam 100% szansy ze bedzie unikalny
- szansa jest zasadniczo pomiędzy 0 a 100%, skąd ta pewność, że gdy ktoś doda artykuł to tytuł będzie unikalny? Trzeba to sprawdzać przecież, tym bardziej, że jak sam wcześniej napisałeś link typu strona.pl/coś-tam-ktoś-tam może prowadzić do czegokolwiek.

Cytat
- tego nie rozumiem
- przy np. edycji artykułu albo jego usunięciu trzeba poprawiać też bazę linków

Cytat
ty jak zmienisz algortym ktory generuje linki musisz zmienic algorytm ktory odczytuje linki
- a guzik, bo oba korzystają z tego samego routingu. Metoda tworząca url jako jeden z parametrów przyjmuje routing (gdy nie podamy to idzie standardowy) a metoda odczytująca URL i wrzucająca zmienne do requesta także bazuje na tym routingu, routing można wygodnie zdefiniować w postaci ini, cfg etc.

Cytat
Jeszcze niewidzialem aplikacji do ktorej mozna dolaczyc cos co nie jest kompatybilne
- dziwne. U mnie wystarczy utworzyć moduł w bazie, podać jako parametr ścieżkę do pliku .php oraz nazwę zmiennej, która będzie dostępna w szablonach podpiętych pod gałęzie z włączonym tym modułem. Można też podać link do PA tego modułu, który będzie się wyświetlał w PA aplikacji - w ten sposób zazwyczaj dołączam skrypty typu kursy walut czy prognoza pogody.

Można oczywiście definiować aliasy w bazie, wpisywać ręcznie linki, losować słowa kluczowe wg ich seo priority itd. ale system nie może się na tym opierać, u mnie byłby to pewnie jakiś routing niestandardowy wdrożony w jednym module choć sam nie wiem w jakim celu, by zaoszczędzić kilka znaków w urlu? Dając parametry na końcu adresu na seo nic nie tracimy smile.gif
dr_bonzo
Cytat
Cytat
nie jest potrzebny algorytm ktory bedzie sprawdzal bo w momencie jego utrzworzenia mam 100% szansy ze bedzie unikalny

- szansa jest zasadniczo pomiędzy 0 a 100%, skąd ta pewność, że gdy ktoś doda artykuł to tytuł będzie unikalny? Trzeba to sprawdzać przecież, tym bardziej, że jak sam wcześniej napisałeś link typu strona.pl/coś-tam-ktoś-tam może prowadzić do czegokolwiek.


Mam algorytm, który gwarantuje, że URL będzie unikalny, nawet dla 1000ca artykułów o tym samym tytule. Wszystko jest załatwiane automatycznie - podaję tytuł artykułu - dostaję unikalny slug (np. 'podatki_w_2011_roku'). Po prostu jak znajdę powtarzający się podstawowy slug - do dopisuję kolejną liczbę na końcu 'podatki_w_2011_roku_2' etc.
marcio
@dr_bonzo mozesz pokazac jak mapujesz te url w router'ze?Bo ty masz predefiniowane url a nie jakies regexp dla url.
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-2024 Invision Power Services, Inc.