![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 5 Dołączył: 10.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Tworzę wersje językowe do swojego serwisu i trochę w pewnym miejscu utknąłem.. a dokładniej na trasach routingu. Otóż chcę by w przypadku gdy nie jest ustawiony parametr lang (wersja polska) ścieżka wyglądała w sposób następujący: kontroler/akcja/nazwa_parametru/wartosc_parametru/etc z innymi parametrami (jeśli są ustawione w $_GET) Natomiast jeśli jest parametr lang (inne wersje językowe): en/kontroler/akcja/nazwa/wartosc/etc. Mam takie 2 reguły w Bootstrapper/_initRoutes() : $router->addRoute( 'controlleraction', new Zend_Controller_Router_Route('/:controller/:action/*', array('lang' => 'pl')) ); $router->addRoute( 'langcontrolleraction', new Zend_Controller_Router_Route('/:lang/:controller/:action/*', array('lang' => 'pl')) ); Reguły te (jak mniemam) wzajemnie się wykluczają.. W przypadku pierwszej skutek daje tylko nie podanie parametru lang, w przeciwnym wypadku lang jest traktowany jako controller (co jest logiczne).. Natomiast w drugim przypadku jest dokładnie na odwrót.. Moje pytanie jest następujące: czy zamierzony przeze mnie efekt jest możliwy do osiągnięcia bez deklarowania osobno tras routingu do każdej akcji (wykorzystuję różne paramtry w $_GET - dlatego użyłem "/*")? Jeśli tak, to proszę o jakąś wskazówkę, która mnie naprowadzi bądź fragment kodu trasy routingu, który mógłby rozwiązać mój problem. W ostateczności użyję drugiej reguły i nawet w przypadku wersji polskiej będę przekazywać "pl" w adresie, jeśli jednak da się to zrobić w bardziej elegancki sposób to zdecydowanie bardziej by mi odpowiadał. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 172 Pomógł: 9 Dołączył: 13.02.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Zrob dwie trasy routingu, cos w podobie jak teraz, tylko w odwrotnej kolejnosci je dodaj.
Zeby to dzialalo musisz tylko dodac 3 parametr do route z lang, okreslajacy jaki ma byc lang np:
"array('lang'=>'[a-z_]+')" ten parametr okresla wartosci jakie moze przyjmowac lang, daj tak jak teraz tylko dodaj ze moze miec tylko dwa znaki, jesli bedziesz mial kontrolery z wieksza iloscia znakow, route bedzie dopasowywal do pierwszego, standarowego routa. ROute z "lang" zostanie pominiety ![]() Pokombinuj cos w tym stylu powinno sie udac. Pozdrawiam Adrian -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 5 Dołączył: 10.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Super, hula! dzięki
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.06.2025 - 13:01 |