onChange pri formularoch – ako sa dostat do inej metody

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

Ahojte, chcel by som spravit jednoduchy formular na zmenu jazyka. Formular obsahuje 1 selectbox a po klinuti na nejaky prvok by som sa chcel dostat do inej metody.

<?php

	...

    $form = new Form();
        $form->addSelect('language', 'Jazyk: ', $langs)
                ->setPrompt($selectedLang)
                ->setAttribute('onChange', 'changeLanguage($form)')
                ->setAttribute('class', 'form-control')
                ->setAttribute('class', 'selectLanguage');

        return $form;
	}


    public function changeLanguage(Form $form) {
        $form->getValues();
        $this->redirect('Homepage:default');
    }

?>

Dostavam vsak AbortException na redirecte. Viete mi niekto povedat ako to mozem fixnut?

CZechBoY
Člen | 3608
+
0
-

To cely je v presenteru?
Tu metodu change volas odkud?

drick
Člen | 61
+
-1
-

CZechBoY napsal(a):

To cely je v presenteru?
Tu metodu change volas odkud?

Ano, cele je to v presentery.

ChangeLanguage metodu volam v tomto riadku:
->setAttribute(‚onChange‘, ‚changeLanguage($form)‘)

ci myslis odkial volam ten formular? Ten formular je v BasePresentery a v metode createComponenLanguageForm .. toto cele volam v @layout.latte

Editoval drick (26. 2. 2016 18:26)

CZechBoY
Člen | 3608
+
0
-

Tak to je spatne.
Tu metodu uved jako callback na success udalost.
Ten setAtribute dej pryc.

$form->onSuccess[] = [$this, 'changeLanguage'];
premek_k
Člen | 172
+
0
-

@CZechBoY: No, to by ještě potřeboval v tom formuláři submit prvek, ne?

Pokud to chce přepínat jen tím, že změní hodnotu v Selectu, tak IMHO nezbude, než si na onChange toho Selectu navěsit javascript a v tom JS pak poslat tu hodnotu na server např. ajaxem.

@drick: Podle mne je jednodušší to dělat pomocí odkazů, nějak takto (píšu z hlavy):

<ul>
   <li><a n:href="language 'en'">English</a></li>
   <li><a n:href="language 'cs'">Česky</a></li>
</ul>

a v presenteru něco takového:

	public function actionLanguage($lang) {
		# V $lang je kod vybraneho jazyka
	}

Editoval premek_k (26. 2. 2016 20:33)

CZechBoY
Člen | 3608
+
0
-

Jo tak jeste pridat submit a pri zmene odeslat form.

Matey
Člen | 142
+
+2
-

@drick toto je to čo chceš

	...
	$form = new Form();
    $form->addSelect('language', 'Jazyk: ', $langs)
            ->setPrompt($selectedLang)
            ->setAttribute('onChange', 'submit()')
            ->setAttribute('class', 'form-control')
            ->setAttribute('class', 'selectLanguage');
		$form->onSuccess[] = [$this, 'changeLanguage'];
    return $form;
}

public function changeLanguage(Form $form) {
    $form->getValues();
    $this->redirect('Homepage:default');
}
drick
Člen | 61
+
0
-

Diky chalani, pomohli ste mi.