To co zamierzam opisać, użyte jest w obecnej wersji Coyote. Nieśmiało sugeruję aby wykorzystać to również w nowej wersji, chyba że ktoś ma inny pomysł :)
Problem:
4programmers.net ma pełno dynamicznych stron takich jak /Pomoc, /Forum/Python, /Kontakt itp. Skąd system ma wiedzieć do którego kontrolera ma przekierować żądanie?
W aplikacjach opartych o wzorzec MVC definiujemy routing. Określamy jaki kontroler i akcja ma być uruchomiona w skutek wywołania odpowiedniej ścieżki (np. /Praca czy /Mikroblogi). Część konfiguracji może być oczywiście określona w pliku konfiguracyjnym. Co z resztą? W Coyote mamy tabelę page
, która zawiera m.in. ścieżkę, tytuł strony, słowa kluczowe, opis oraz kontroler czy akcja. Niemal każda podstrona w serwisie ma odzwierciedlenie w rekordzie tabeli page
. Tak więc routing wyszukuje żądaną ścieżkę w bazie danych jeżeli nie może jej znaleźć w pliku. Dzięki temu URL
Takie rozwiązanie ma kilka zalet:
- Możliwe jest wyświetlenie hierarchii stron (strony macierzyste, potomkowie)
- Proste zbudowanie mapy strony w XML
- Możliwość blokowania dostępu do danej strony określonym grupom użytkowników
- Licznik wizyt każdej podstrony w serwisie
- Możliwość definiowania słów kluczowych, opisu i innych ustawień (osobno dla każdej podstrony w sewisie)
- W bazie danych "trzymane" są powiązania pomiędzy stronami (tj. w której stronie znajduje się link do drugiej strony)
- W przypadku zmiany nazwy strony, możemy "trzymać" starą wersję URL (i przekierować na nowy adres)
- Tagi przypisane są do danej strony. Dzięki temu możemy grupować oferty pracy czy wątki na podstawie tagu
- Informacja o obserwowanych stronach, wątkach czy ofertach pracy w jednej tabeli (po prostu klucz obcy do tabeli
page_id
)