Routovani s jazykovymi mutacemi s pouzitim FilterRouter se statickou casti adresy

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
JirkaN
Člen | 7
+
0
-

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
+
0
-

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
+
0
-

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.

h4kuna
Backer | 740
+
0
-

tohle by ti mohlo pomoci

JirkaN
Člen | 7
+
0
-

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.