Vzájemná validace hodnot dvou radiolistů

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

Ahoj,
mám formulář, kde jsou dva radiolisty:

<?php
		$form->addRadioList('doprava', 'Způsob dopravy', ['Osobní vyzvednutí', 'Poštou']);
		$form->addRadioList('platba', 'Způsob platby', ['Kartou', 'V hotovosti', 'Dobírka']);
?>

Dají se definovat validační pravidla na těchto dvou prvcích tak, abych zajistil, že:

  • Když je doprava typu „Osobní vyzvednutí“, není platná platba „Dobírkou“
  • Když je doprava typu „Poštou“, není platna platba „V hotovosti“

?

Díky, Přemek

Pavel Kravčík
Člen | 1196
+
0
-

https://doc.nette.org/cs/forms

$form->addText('email', 'E-mail:')
    // pokud je checkbox zaškrtnut
    ->addConditionOn($form['newsletters'], Form::EQUAL, TRUE)
        // pak vyžaduj e-mail
        ->setRequired('Zadejte e-mailovou adresu');
premek_k
Člen | 172
+
0
-

Pavel Kravčík napsal(a):

https://doc.nette.org/cs/forms

$form->addText('email', 'E-mail:')
    // pokud je checkbox zaškrtnut
    ->addConditionOn($form['newsletters'], Form::EQUAL, TRUE)
        // pak vyžaduj e-mail
        ->setRequired('Zadejte e-mailovou adresu');

Díky, ale to si právě myslím, že není ono – já potřebuji testovat jednen z N stavů toho RadioListu. U Checkboxu je jen zatrhnuto/nezatrhnuto, tam je to jasné.

Napadá mne však nyní, zda nejde udělat nějaká takováto konstrukce:

<?php
	$form->addRadioList('doprava', 'Způsob dopravy', ['Osobní vyzvednutí', 'Poštou']);
	$form->addRadioList('platba', 'Způsob platby', ['Kartou', 'V hotovosti', 'Dobírka']);

	$form['platba'][1]->addConditionOn($form['doprava'][0], Form::Equal, TRUE)...
	a
	$form['platba'][2]->addConditionOn($form['doprava'][1], Form::Equal, TRUE)...
?>

Editoval premek_k (27. 11. 2015 17:39)

jiri.pudil
Nette Blogger | 1032
+
0
-

Napadá mne však nyní, zda nejde udělat nějaká takováto konstrukce:

Ne, ale něco takového by fungovat mělo:

$form['platba']->addConditionOn($form['doprava'], $form::EQUAL, 0)
    ->addRule(~$form::EQUAL, 2);
premek_k
Člen | 172
+
0
-

Díky. V rychlosti jsem to sice zkusil, ale nefunguje to – chce to asi odladit…

Edit:
Tím chci říct, že se tomu budu chvíli věnovat, a ne to, že čekám se založenýma rukama na to, až to někdo odladí a postne… :-)
Když jsem to po sobě četl, zjistil jsem, že interpretace mé odpovědi není jednoznačná.

Editoval premek_k (27. 11. 2015 19:58)

F.Vesely
Člen | 369
+
0
-

Nez vymyslet validacni pravidla, tak bych sel cestou Dependent Selectbox (v tvem pripade Radiolist). Nejdrive by si clovek vybral dopravu a podle toho by se mu zobrazily platby.

premek_k
Člen | 172
+
0
-

„Tak určitě…“, řešit se to dá všelijak. Chtěl jsem zjistit, zda je možnost pro tento případ použít validační pravidla.

David Grudl
Nette Core | 8228
+
+3
-

jiri.pudil napsal(a):

Napadá mne však nyní, zda nejde udělat nějaká takováto konstrukce:

Ne, ale něco takového by fungovat mělo:

$form['platba']->addConditionOn($form['doprava'], $form::EQUAL, 0)
    ->addRule(~$form::EQUAL, 2);

asi by mělo být addRule(~$form::EQUAL, ‚hlaska‘, 2);

premek_k
Člen | 172
+
0
-

Ano, toto je funkční řešení. Díky všem!