problem se zmenou url handleChangeLocale

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

ahoj mam anglickou URL „http://www.bt.loc/en/tours/motoen-spain“

pak mam ceskou vlajecku a na ni odkaz

<a n:href="changeLocale!, cs"><img src="{$basepath}/images/front/langs/cs.png" alt="Česky" /></a>

vygenerovany odkaz je „http://www.bt.loc/zajezdy/moto“
ale odkaz by mel byt „http://www.bt.loc/zajezdy/moto-spanelsko“

changeLocale mam

public function handleChangeLocale($locale)
    {
        $this->locale = $locale;
        $this->redirect('this');
    }

prijde mi jako by se nepredaval posledni parametr „spain“ ale netusim jak to odzkouset

amik
Člen | 118
+
0
-
  • jak vypadají tvoje routy?
  • je trochu zvláštní, že chceš, aby changeLocale! cs směrovalo na španělsko
  • je proměnná locale v presenteru persistentní?
vosy
Člen | 532
+
0
-

smeruje na spanelsko protoze to jsou zajezdy ve spanelsky, ne spanelsky

v BasePresenteru mam
/** @persistent */
public $locale;

a routy vypadaji takto

/* SEZNAM ZAJEZDU */
		$frontRouter[] = new Route('[<locale cs|en|de>/]<presenterUri>/<typ1>[-<typ2>]',
				array(
					'presenter' => NULL,
					'action'=>'default',
					'locale'=>'cs',
					'typ1'=>NULL,
					'typ2'=>NULL,

					NULL => array(
					    Route::FILTER_IN => function($params)
					    {
					    	if($params['typ1'])
					    	{
						    	$params['presenter'] = 'Tours';

						    	$params['typ1'] = $this->UrlTransform->uriToTyp1($params['typ1'], $params['locale']);

						    	if($params['typ2'])
						    	{
							    	$params['typ2'] = $this->UrlTransform->uriToTyp2($params['typ2'], $params['locale']);
							    }

						    	unset($params['presenterUri']);
	// print_r($params);
						    	return $params;
						    }else
						    {
						    	return NULL;
						    }
					    },
					    Route::FILTER_OUT => function($params) {return NULL;}
					)
					));


		$frontRouter[] = new Route('[<locale cs|en|de>/]<presenter>/<typ1>[-<typ2>]',
				array(
					'presenter' => NULL,
					'action'=>'default',
					'locale'=>'cs',
					'typ1'=>NULL,
					'typ2'=>NULL,

					NULL => array(
						Route::FILTER_IN => function($params) {return NULL;},
					    Route::FILTER_OUT => function($params)
					    {
					    	if($params['typ1'])
					    	{
						    	$params['typ1'] = $this->UrlTransform->typ1ToUri($params['typ1'], $params['locale']);

						    	if($params['typ2'])
						    	{
							    	$params['typ2'] = $this->UrlTransform->typ2ToUri($params['typ2'], $params['locale']);
							    }

						    	$params['presenter'] = $this->UrlTransform->toursToUri($params['locale']);
	// print_r($params);
						    	return $params;
						    }else
						    {
						    	return NULL;
						    }
					    }
					)
					));

Editoval vosy (4. 6. 2014 18:38)

Pavel Macháň
Člen | 282
+
-1
-

vosy napsal(a):

smeruje na spanelsko protoze to jsou zajezdy ve spanelsky, ne spanelsky

v BasePresenteru mam
/** @persistent */
public $locale;

a routy vypadaji takto

\--

Já překládání slugu neřeším v routě ale v handle metodě. Když vyvolám hadle na změnu jazyka tak vím jaký produkt/zájezd/atd mám. Pomocí toho zjistím z DB slug pro potřebný jazyk a přesměruju na adresu urcenou pro new jazyk.

vosy
Člen | 532
+
0
-

mohl bys mi poslat nejakou ukazku jak to resis???

vosy
Člen | 532
+
0
-

Plus da se zjistit jaka Routa byla pouzita pro vyrobu daneho href odkazu