addConditionOn a hidden input

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

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
+
0
-

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
+
0
-

Snazim sa o implementaciu radiolistu:

<?php
$form->addRadioList('types', 'Types: ', array(1=>'7 Days (&pound;10)', '1 month (&pound;20)', '3 month (&pound;30)', '6 month (&pound;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
+
0
-

Co rovnou zadat

$form->addRadioList('types', 'Types: ', array(1=>'7 Days (£10)', '1 month (£20)', '3 month (£30)', '6 month (£40)'));
piler
Člen | 111
+
0
-

David Grudl napsal(a):

Co rovnou zadat

$form->addRadioList('types', 'Types: ', array(1=>'7 Days (£10)', '1 month (£20)', '3 month (£30)', '6 month (£40)'));

aj to je moznost, ale nie je sposob ako to vyriesit, ked tam mam £, aby sa to interpretovalo?