setItems po addConditionOn
- sd
- Člen | 87
Zdravím,
měl bych dotaz… V presenteru (a ve funkci
createComponentRegisterForm
) mám:
$crsr = [
'Česká republika' => 'Česká',
'Slovenská republika' => 'Slovenská'
];
$form->addSelect('country', 'Republika', $crsr);
$krajeCR = [
'Praha' => 'Praha',
'Středočeský kraj' => 'Středočeský',
'Jihočeský kraj' => 'Jihočeský',
];
$krajeSR = [
'kraj1' => 'kraj1',
'kraj2' => 'kraj2',
];
$form->addSelect('region', 'Kraj')
->addConditionOn($form['country'], Nette\Application\UI\Form::EQUAL, 'Česká Republika')
->setItems($krajeCR)
->addConditionOn($form['country'], Nette\Application\UI\Form::EQUAL, 'Slovenská Republika')
->setItems($krajeSR)
->setRequired();
Následně vyhodí chybu:
Call to undefined method Nette\Forms\Rules::setItems().
Je vůbec možné udělat to tak, aby když uživatel vybere např. českou republiku, tak aby v selectu s kraji byly jen kraje ČR?
Děkuji.
Editoval sd (26. 9. 2015 12:48)
- duke
- Člen | 650
Ne, pro toto podpora v Nette není, ale podobného výsledku můžeš dosáhnout pomocí toggles. Uděláš si zvlášť selekty pro české a slovenské kraje, a přes addCondition a toggle je (či lépe nějaké obalující html prvky nad nimi) učiníš viditelné podle hodnoty selektu country. Jinak to jde samozřejmě taky ještě přes ajax/snippety, což se tu už mnohokrát řešilo pod názvem „závislé selekty“.
Pro představu ty toggles:
$form->addSelect('country', 'Republika', $countries)
->addCondition($form::EQUAL, self::CZECH_REPUBLIC)
->toggle('czToggle')
->elseCondition()
->toggle('skToggle');
V šabloně pak budeš mít ty selekty krajů např. uvnitř divů:
<div id="czToggle">{input regionCZ}
</div>
<div id="skToggle">{input regionSK}
</div>