![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 112 Pomógł: 20 Dołączył: 10.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Sytuacja wygląda nastęująco.
Mam URL który wygląda tak: http://cake/aktualnosci/tutaj-tytul-aktualnosci Ma to na celu oczywiscie zrobienie bardziej NiceURLs niz http://cake/news/1 Plik app/config/routes.php
W kontrolerze NewsController mam metodę showNews, która odpowiada za pobranie odpowiedniego newsa z modelu, na podstawie meta_name:
Jak do tej pory, wyszsko gra. Kolejna sprawa jest taka, że URLe http://cake/pages/kontakt, http://cake/pages/o-nas nie wygladaja OK, a bardziej OK wygladaja URLe http://cake/kontakt, http://cake/o-nas. Ten problem rozwiazalem kierujac caly nieznany ruch na kontrole Pages: Plik app/config/routes.php To ostania regułka, więc wszystko co nie zostanie złapane do innych konrolerów pójdzie do kontrolera Pages, metody subpage, która dalej decyduje co pokazać. Tu właśnie pies pogrzebany został :) Pojawił się URL http://cake/oferta/dla-firm. Jest kontroller Offers, jest Routing z oferta/ na kontroller OffersController. I dostaję błąd: You are seeing this error because the action dlafirm is not defined in controller OffersController. Ha, ale metoda dlafirm jak najbardziej istnieje w OffersController. Dalej, przszukałem http://groups.google.com/group/cake-php/ i znalazłem info, że można rozwiązać problem stosując brzydki hack w pliku app/config/bootstrap.php. Hack polega na przepisaniu $_GET['url'] i pozbyciu się myślników z URLa: Hack oczywiście robi swoje, i OffersController zaczyna widzieć metodę, wszystko działa. Działa, do momentu kiedy nie wrócimy do http://cake/aktualnosci/tutaj-tytul-aktualnosci. Po zastosowaniu hacka, ten URL staje się oczywiście http://cake/aktualnosci/tutajtytulaktualnosci (wewnątrz aplikacji) i nie zostaje w bazie znaleziony odpowiedni rekord. Zapisanie w bazie wersji bez myślników jest o tyle problematyczne, że wykorzystuję pole meta_name do budowy linków. Można ewentulanie za każdym razem w locie tworzyć meta_name na podstawie tytułu newsa /artykułu/whatever ale co z sytuacją, kiedy nie będzie się to działo automatycznie, tylko dam możliwość storzenia meta_name poprzez panel administracyjny. Wtedy tytuł newa może być "Zapraszamy do reklamy" a odpowiadający mu meta_name "to-bardzo-fajny-news". Jakieś pomysły, co zrobić z zainstniałą sytuacją? Nie znam cakePHP super-świetnie. Do tej pory poznawałem go w domowym zaciszu testując. Prawdziwe problemuy rodzą się właśnie w takich real-life sytuacjach. pozdr. Ten post edytował siemakuba 24.10.2006, 10:18:20 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 627 Pomógł: 33 Dołączył: 1.05.2005 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Jakbyś bardziej przemyślał kontrukcje serwisu to byś się w ogole nie bawil takimi problemami bo przecież przykładowe o-nas i kontakt można jakoś zgrupować w jeden kontroler np. /firma/o-nas, /firma/kontakt
i ładnie wygląda, i nie masz problemu. Wiem, że to nie rozwiązanie Twojego problemu bezpośrednio, ale warto nad tym pomyśleć aby w przyszłości znowu nie kombinować bo wcześniej się za bardzo zakombinowało. jeszcze edit do drugiego przykladu: tutaj tez nie bawie sie w kombinacje i mam: serwis.pl/news/123/to-jest-tytul-newsa rewrite tytulu mozesz zrobic poprzez napisanie wlasnego helpera i zamiane tytulu na rewrite tytul na poziomie widoku. Ten post edytował normanos 24.10.2006, 11:27:59 -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.06.2025 - 14:45 |