Problem s prekladem soucasne url

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

mam takovouto URL :http://www.bt.loc/atv/
kde se maji zobrazit zajezdy pro ctyrkolky

pak mam takovyto router pravidlo:

/* SEZNAM ZAJEZDU */
		$frontRouter[] = $routeZajezd = new FilterRoute('[<locale cs|en|de>/]<typ1>/[<typ2>]',
		array(
			'locale' => 'cs',
			'presenter' => 'Tours',
			'action' => 'default',
			'typ1' => NULL,
			'typ2' => NULL,
			));

		$routeZajezd->addFilter('typ1',
		array($this->UrlTransform, 'seznamZajezdu_UriToTyp1'),
		array($this->UrlTransform, 'seznamZajezdu_Typ1ToUri'));


		return $router;

a dane funkce jsou:

function seznamZajezdu_UriToTyp1($slug, \Nette\Application\Request $request)
    {
        $locale = $request->parameters['locale'];

        $tab = \App\Glb::$TABS['typyStroju'];

        $r = $this->db->table($tab)
                    ->WHERE('uri_'.$locale.'=?', $slug)
                    ->fetch();

        if($r->kod!="")
        {
            return 'stroj_'.$r->kod;
        }


        return NULL;
    }

    function seznamZajezdu_Typ1ToUri($slug, \Nette\Application\Request $request)
    {

        $locale = $request->parameters['locale'];

        list($typ, $id) = explode('_', $slug);

        if($typ == 'stroj')
        {
            $tab = \App\Glb::$TABS['typyStroju'];

            $r = $this->db->table($tab)
                        ->WHERE('kod=?', $id)
                        ->fetch();

            if($r->kod!="")
            {
                return $r->{'uri_'.$locale};
            }
        }

        return NULL;
    }

pak mam na vlajecce odkaz:

<a n:href="changeLocale!, en"><img src="{$basepath}/images/front/langs/en.png" alt="English" /></a>
public function handleChangeLocale($locale)
    {
        $this->locale = $locale;
        $this->redirect('this');
    }

nette mi z toho vytvorilo:

<a href="/en/?do=changeLocale"><img src="/images/front/langs/en.png" alt="English"></a>

pritom ocekavane url by melo byt „/en/atv/“

kdyz si vypisu parametry:

$httpRequest = $container->getService('httpRequest');
        $uri = $httpRequest->getUrl();
        echo $uri;

        $r = $this->getParameters();
        print_r($r);
http://www.bt.loc/atv/
Array ( [typ1] => stroj_atv [locale] => cs [action] => default [typ2] => )

tak si myslim ze NETTE ma vsechno co potrebuje.

Editoval vosy (12. 6. 2014 10:37)

Tabetha
Člen | 140
+
0
-

a nestačilo by ti to takto? ak máš locale ako persistent, tak to zmeníš priamo cez odkaz a nemusíš používať handle na toto :-)

<a n:href="this, locale => en"><img src="{$basepath}/images/front/langs/en.png" alt="English" /></a>
vosy
Člen | 532
+
0
-

dekuji o zjednoduseni, ale i tak furt stejne

vosy
Člen | 532
+
0
-
function actionDefault()
    {
        global $container;

        $httpRequest = $container->getService('httpRequest');
        $uri = $httpRequest->getUrl();
        echo $uri;

        $r = $this->getParameters();
        print_r($r);

        $link = $this->link('this', array('locale'=>'en'));
        echo $link;
    }

vysledek je

http://www.bt.loc/moto/chile

Array ( [typ1] => stroj_moto [typ2] => destinace_36 [locale] => cs [action] => default )

/en/

?? tak to fakt nechapu :(

Tabetha
Člen | 140
+
0
-

tak si do toho link pridaj aj ten „typ1“ a „typ2“ alebo si daj aj tie ako persistent v danom presentri, ak som nezabudol na nejakú možnosť alebo vec čo by tomu bránila

vosy
Člen | 532
+
0
-

dal jsem tedy

/** @persistent */
    public $typ1;

    /** @persistent */
    public $typ2;

vysledek je

<a href="error: No route for Front:Tours:default(locale=de, typ1=motoen, typ2=chile-en)"><img src="/images/front/langs/de.png" alt="Deutsch"></a>