addConditionOn a hidden input
- Honza Kuchař
- Člen | 1662
Proč hidden input?
Ve výchozím zobrazení je zobrazen radio button. Když bude disabled() jeho
value bude v podmínkách null. Ale já potřebuji aby měl hodnotu
„ano“/„ne“
if($plneZobrazeni){
$form->addRadioList("Firma","Jsem ",$hodnoty)
->addRule(Form::FILLED, "Prosím vyberte, zda jste soukromá osoba či firma.")
->addCondition(Form::EQUAL, 'ano')
->toggle('firmaContainer');
}
else{
$form->addHidden("Firma")->value = $defaults["firma"];
}
→ nahradil jsem ho v editaci položkou hidden
→ $form[„hidden“]->value vrátí „ano“/„ne“. Když ale použiji
na nějakém prvku addConditionOn($form[„hidden“],Form::EQUAL,„ano“),
tak to prostě neproběhne dobře. Přitom o pár řádků výše jsem nastavil
$form[„hidden“]->value = „ano“; Takže opravdu nevím kde je chyba.
Něco jako readonly pro radio neexistuje. :( Takže jediný co mi prozatím
zbylo vytvořit textinput a potm ho se stylech skrýt. Nebo jak rešíte
formulář pro vytvoření uživatele a následné jeho úpravy, ale
ne všech možností? Co jsem samozřejmě zkoušel jednoduše
na to co nechci aby šlo změnit dát ->setDisabled(). Ale pak nefunguje ani
validace. Ale nehápu proč??? Neodesílá se jasny, ale proč nefachčí ta
validace? Na tomhle jsem se teda totálně zasekl a opravdu ani trošku nevím
jak dál :(
Editoval honzakuchar (25. 4. 2009 14:25)
- _Martin_
- Generous Backer | 679
V souladu s pravidlem „nikdy nevěř datům z klienta“ (do čehož se počítá i nutnost nespoléhat se na setDisabled) bych navrhoval vytvářet formulář přímo na míru:
$plneZobrazeni = TRUE;
$data = array(
'firma' => 1,
);
$form = new Form;
$form->addGroup()
->setOption('container', Html::el('div'));
$form->addRadioList('firma', 'Jsem ', array(0 => 'soukromá osoba', 1 => 'firma'));
$form->addGroup()
->setOption('container', Html::el('div')->id('firmaContainer'));
$firma = $form->addContainer('firmaContainer');
$firma->addText('name', 'Jméno firmy');
$firma->addText('ico', 'IČO');
$form->addGroup()
->setOption('container', Html::el('div')->id('personContainer'));
$person = $form->addContainer('personContainer');
$person->addText('name', 'Jméno osoby');
$form->setCurrentGroup();
$form->addSubmit('ok', 'Uložit');
if ($plneZobrazeni) {
$form['firma']->addRule(Form::FILLED, "Prosím vyberte, zda jste soukromá osoba či firma.");
$form['firma']->addCondition(Form::EQUAL, 1)
->toggle('firmaContainer');
$form['firma']->addCondition(Form::EQUAL, 0)
->toggle('personContainer');
} else {
if ($data['firma'] !== 0) {
unset($form['personContainer']);
}
if ($data['firma'] !== 1 ) {
unset($form['firmaContainer']);
}
$form['firma']->setDisabled();
}
$form->setValues($data);
echo $form;
- piler
- Člen | 111
Snazim sa o implementaciu radiolistu:
<?php
$form->addRadioList('types', 'Types: ', array(1=>'7 Days (£10)', '1 month (£20)', '3 month (£30)', '6 month (£40)'));
?>
ale, £ sa neinterpretuje, ale je asi osetrena pomocou htmlspecialchars(). Da sa to napr. pomocou $form[‚types‘]->getLabelPrototype() nejak zmenit?
- David Grudl
- Nette Core | 8284
Co rovnou zadat
$form->addRadioList('types', 'Types: ', array(1=>'7 Days (£10)', '1 month (£20)', '3 month (£30)', '6 month (£40)'));