Překlad slova v url – použitím proměnné začnou padat stránky do špatného routeru

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

Ahojte, potřeboval bych poradit. Mám následující router (od Filipa z KDYBY) na překlad id produktu na hezké url a zpět. Dále specifikovaný presenter a action na kterém se má routovat
(Shop:product).

$frontRouter[] = $route = new FilterRoute('[<locale=cs '.$locale.'>/]produkt/<idShopProduct>', 'Shop:product');
$route->addFilter('idShopProduct', array($container->routerRepository, 'getShopProductIdByUrl'), array($container->routerRepository, 'getShopProductUrlById'));

Problém je v tom že se mi nedaří přeložit to slovo → produkt ← v adrese. Totiž pokud na to použiji proměnnou, tak mi do toho routeru začnou padat i stránky, které tam nepatří, mám totiž nadefinovaný router podobně i pro jiné sekce, např. články viz.:

$frontRouter[] = $route = new FilterRoute('[<locale=cs '.$locale.'>/]clanek/<articleUrl>', 'Cms:article');
        $route->addFilter('articleUrl', array($container->routerRepository, 'getCmsIdByUrl'), array($container->routerRepository, 'getCmsUrlById'));

abych se tomu vyhnul tak jsem musel definovat výchozí hodnotu a povolené hodnoty takto:

$frontRouter[] = $route = new FilterRoute('[<locale=cs '.$locale.'>/][!<produkt=produkt produkt|product>/]<idShopProduct>', 'Shop:product');
       $route->addFilter('produkt', array($container->routerRepository, 'getProductByUrl'), array($container->routerRepository, 'getProductById'));
       $route->addFilter('idShopProduct', array($container->routerRepository, 'getShopProductIdByUrl'), array($container->routerRepository, 'getShopProductUrlById'));

Tohle funguje správně pokud jsem přímo na produktu, překládá produkt na product v případě angličtiny, ale vytváří to špatně odkazy na kategoriích produktů – odkaz je ../en/produkt/some-product místo ../en/product/some-product

Přikládám i funkce na překlad slova (jen zjednodušeně)

		public function getProductByUrl($presenter, Nette\Application\Request $request){
    $lang = $request->getParameters()['locale'];
    if($lang == 'cs'){
        return "produkt";
    }else{
        return "product";
    }
}
 public function getProductById($presenter, Nette\Application\Request $request){
    $lang = $request->getParameters()['locale'];
    if($lang == 'en'){
        return "product";
    }else{
        return "produkt";
    }
}

Fóra jsem pročetl, ale nenašel jsem ten problém že se ty routery „bijou“.
Neví někdo co s tím? Děkuji!

Stejsi
Člen | 21
+
0
-

Zjednodušeně řečeno nevím jak překládat pár Presenter:action na url. Samostatně překlad pro presenter a action vím jak udělat. Ale jak přeložit ../<presenter>/<action>/.. na např. ../neco/..?