Hodnota vyplněna a tudíž hodnota v jiné položky v rozsahu

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

Mám formulář a v něm položky – lámu si hlavu jak zapsat podmínku:

Je-li položka **A** vyplněna (co lze snadno),
pak musí být položka **B** v rozdahu 1 - 100 (nebo větší než 1 - to je jedno)

Chtěl bych to pomocí validačních pravidel.

Jinak to samozřejmě umím ve validační funkci pověšené na onValidate[].

Znáte někdo elegantní řešení ?

Díky

voda
Člen | 561
+
0
-

Najdeš to v dokumentaci. Je to příklad:

$form->addCheckbox('newsletters', 'zasílejte mi newslettery');

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

Tohle samozřejmě vím. Jenže já potřebuji něco ve stylu:

$this->addText('JineLegenda', 'x) jiné (legenda)', 40, 80)
	->addRule($this['JinePocet'], 'Položka %label není v rozsahu 1 až n.', array(1, NULL));

$this->addText('JinePocet', 'x) jiné (počet)', 5, 5)
	->addCondition(parent::FILLED)
		->addRule(parent::RANGE, 'Položka %label není kladné celé číslo.', array(0, NULL))
	->addCondition($this['JineLegenda'], parent::FILLED)
		->addRule(parent::RANGE, 'Položka %label není v rozsahu 1 až n.', array(1, NULL));

Jenže tohle se musí vytáhnou až za konec – jinak „Component with name ‚JinePocet‘ does not exist.“
A připadá mi to příliš krkolomné.

Nějaké smysluplné návrhy ?

Jan Endel
Člen | 1016
+
0
-

smi napsal(a):

Je-li položka **A** vyplněna (co lze snadno),
pak musí být položka **B** v rozdahu 1 - 100 (nebo větší než 1 - to je jedno)

Form:

$this->addText('a', 'Položka A');

$this->addText('b', 'Položka B')
	->addConditionOn($this['a'], Form::FILLED)
		->addRule(Form::RANGE, "položka musí být větší než %d.", array(0, NULL));

Podle tvého popisu by to validační pravidlo vypadalo nějak takhle, zkus to kdyžtak trošku lépe popsat, páč jsem z tvého popisu dost zmaten.

smi
Člen | 75
+
0
-

pilec napsal(a):

smi napsal(a):

Je-li položka **A** vyplněna (co lze snadno),
pak musí být položka **B** v rozdahu 1 - 100 (nebo větší než 1 - to je jedno)

Form:

$this->addText('a', 'Položka A');

$this->addText('b', 'Položka B')
	->addConditionOn($this['a'], Form::FILLED)
		->addRule(Form::RANGE, "položka musí být větší než %d.", array(0, NULL));

Podle tvého popisu by to validační pravidlo vypadalo nějak takhle, zkus to kdyžtak trošku lépe popsat, páč jsem z tvého popisu dost zmaten.

Jo, takhle nějak jsem to myslel – inspiroval jsi mě, takže to ted vypadá takhle (kdyby to někdo někdy užil :o) ):

$this->addText('JineLegenda', 'x) jiné (legenda)', 40, 80);
$this->addText('JinePocet', 'x) jiné (počet)', 5, 5)
	->addCondition(parent::FILLED)
		->addRule(parent::RANGE, 'Položka "%label" není číslo.', array(0, NULL))
	->endCondition()

	->addConditionOn($this['JineLegenda'], parent::FILLED)
		->addRule(parent::RANGE, 'Položka "%label" není číslo větší než 1.', array(1, NULL))
	->elseCondition()
		->addRule(parent::RANGE, 'Není-li legenda, musí být "%label" nulová.', array(0, 0))
//		->addRule(~parent::EQUAL, 'Není-li legenda, musí být "%label" nulová.', 0)
	->endCondition();

Jen nechápu, proč mi to nechodí s ~parent::EQUAL .