Routovani s jazykovymi mutacemi s pouzitim FilterRouter se statickou casti adresy
- JirkaN
- Člen | 7
Ahoj,
potreboval bych poradit s routovanim a jazykovyma mutacema s pouzitim
FilterRouter, mozna uz to nekdo resil a vyresil, ja na to zaboha nemuzu
prijit.
Mam web s obsahem (dynamicky generovane stranky z db), reference a mam to s jazykovymi mutacemi.
Pro obsahove stranky mi to funguje spravne a routy mam takto: (routu pro obsah mam samozrejme na konci, uvadim to jen jako funkcni kus kodu)
<?php
$router[] = $route = new \Addons\Application\Routers\FilterRoute('<lang [a-z]{2}>/<url>', array(
'module' => 'Front',
'presenter' => 'Content',
'action' => 'default',
));
$route->addFilter('url', '\FrontModule\ContentModel::urlToId', '\FrontModule\ContentModel::idToUrl');
?>
Nicmene potreboval bych jeste alespon reference, routy mam takhle:
<?php
$router[] = $route = new \Addons\Application\Routers\FilterRoute('en/references/<url>', array(
'module' => 'Front',
'presenter' => 'Stories',
'action' => 'detail',
'lang' => 'en',
));
$route->addFilter('url', '\FrontModule\StoriesModel::urlToId', '\FrontModule\StoriesModel::idToUrl');
$router[] = $route = new \Addons\Application\Routers\FilterRoute('it/riferimenti/<url>', array(
'module' => 'Front',
'presenter' => 'Stories',
'action' => 'detail',
'lang' => 'it',
));
$route->addFilter('url', '\FrontModule\StoriesModel::urlToId', '\FrontModule\StoriesModel::idToUrl');
$router[] = new Route('en/references', array(
'module' => 'Front',
'presenter' => 'Stories',
'action' => 'default',
'lang' => 'en',
));
$router[] = new Route('it/riferimenti', array(
'module' => 'Front',
'presenter' => 'Stories',
'action' => 'default',
'lang' => 'it',
));
?>
Pokud se dostanu na stranku s vypisem referenci, tak v EN verzi je vsechno v poradku, odkazy na detail reference mi generuji spravnou adresu /en/references/reference-en-1.
Pokud se ale dostanu na stranky s vypisem referenci v IT verzi, tak se mi
generuji adresy spatne a to ve stylu /it/presenter/akce?url=reference-it-1.
(dojde spravne k prekladu nazvu reference, ale cele by to melo smerovat na
/it/riferimenti/reference-it-1).
Cely problem zpusobuje $route->addFilter ⇒ pokud totiz zakomentuju addFilter u routy pro EN detail, tak mi IT detail funguje spravne… ale nevim co s tim, zkousel jsem vice ci mene zoufale kousky a nic.
Nemel nekdo podobny problem?
- hAssassin
- Člen | 293
proc u tech referenci mas dve routy, kazdou pro jeden jazyk? Spis to udelej stejne jako pro CMSko, cili si dej lang jako perzistentni a pridej si ho primo do masky routy.
Kdysi se jsem toto resil, ale uz si to nepamatuju a nemam to momentalne u sebe. Kdyztak se ozvu vecer nebo zitra, jak to budu stihat, ale zkus odstranit tu duplicitni routu i s tim filtrem.
- JirkaN
- Člen | 7
Noo 2 routy mam pro to, abych i EN verze mel /references a u IT verze mel /riferimenti a napevno to mam, aby mi to odchytl StoriesPresenter… protoze kdybych to takhle nemel, tak mi to pak odchyti routa pro obsahove stranky…
Kdyby se ti podarilo najit jak si to vyresil, tak by to bylo super.
- JirkaN
- Člen | 7
h4kuna: Podle odkazu co jsi poslal jsem dal dohromady ten obsah, kterej
funguje skvele. Fungovali by mi tak i ty reference, ale problem nastava s tema
jazykovyma mutacema.
Jak jsou tam 2 stejne routy, ktere se vlastne lisi jen jazykem (ale potrebuju
to tak, aby to odchyt jiny presenter nez Content + aby u en verze bylo
references a u it riferimenti v adrese), tak funguje jen ta prvni a druha uz
me haze na spatny tvary adres.
Vlastne to resim hlavne kvuli prepnuti jazyka, abych vzdy zustal na stejne strance a zmenila se mi adresa podle prekladu… ale asi to vyresim nakou metodou, kde se mi pri zmene jazyka zjisti kam se presmerovat a tam dam holt redirect… uz me nic jinyho nenapada.