Dynamický formulář – checkboxlist
- MikyWoW
- Člen | 9
Lze nějak přiřadit k jednotlivým itemům(Checkbox) v Checkboxlistu id? (->setOption(‚id‘, ‚něco‘)). Itemy se zadávají jako obyčejný array…
Jde mi to jen pokud přidávám do formuláře jednotlivé checkboxy ale z nich nelze udělat list, abych neměl hromadu hodnot ale pouze jeden array, jako u Checkboxlistu. Nebo jsem nepřišel na to jak…
O co mi jde: Mám selectbox a podle vybrané položky chci zobrazit jen vhodné checkboxy. Našel jsem v dokumentaci toto: https://doc.nette.org/…s/validation
Další otázka je zda pokud zaškrtnu checkbox a pak ho následně schovám změnou v selectboxu, zda se po odeslání formuláře přenese nebo ne. Pokud by se přenášel tak by to nedávalo pro mě smysl.
Řešení s jednotlivýma Checkboxama bude sice asi funkční ale blbě se to pak zpracovává. Nějaký lepší nápad?
Editoval MikyWoW (22. 8. 2016 19:00)
- David Krupička
- Člen | 45
Ahoj, nehledáš toto?
$form = new Form;
$form->addCheckboxList('colors', 'Favorite colors:', array(
'r' => 'red',
'g' => 'green',
'b' => 'blue',
));
- MikyWoW
- Člen | 9
Tohle jsme používal ale nejde na to aplikovat ten filtr který je popsán v odkaze. Toto mi vpodstatě funguje ale výsledek je hromada hodnot pro každý checkbox zvlášť. Já bych to potřeboval aplikovat na CheckboxList ale nejde mi přistupovat k jednotlivým checkboxům v listu abych nastavil „->setOption(‚id‘, ‚type_‘.$key);“
$form = new Form;
$sel = new Nette\Forms\Controls\SelectBox('produkt:', $this->getproducts());
foreach ($this->getproducts_types() as $key => $value)
{
$t = preg_split('/,/', $value);
foreach ($t as $c)
{
$sel->addCondition($form::EQUAL, $key)
->toggle('type_'.$c);
}
}
$form->addComponent($sel, 'product');
foreach ($this->gettypes() as $key => $value)
{
$form->addCheckbox('type_'.$key, $value)
->setOption('id', 'type_'.$key);
}
- Barvoj
- Člen | 60
A co použít metodu setOmitted
na checkboxlisty, které se
nemají objevit ve values po submitu formuláře?
Napadá mě něco takového:
Presenter:
protected function createComponentMyForm($name)
{
// je klíčové abys formuláři předával $this a $name jinak nebude fungovat níže použité $select->getValue()
$form = new Form($this, $name);
$select = $form->addSelect('pick', 'Pick', ['first' => 'First', 'second' => 'Second'])
->setDefaultValue('first');
$form->addCheckboxList('first', 'First', ['a' => 'a', 'b' => 'b', 'c' => 'c'])
->setOmitted(true); // Checkboxy se neobjeví ve values
$form->addCheckboxList('second', 'Second', ['d' => 'd', 'e' => 'e'])
->setOmitted(true); // Checkboxy se neobjeví ve values
$form->addSubmit('submit', 'Submit');
$select->addCondition(Form::EQUAL, 'first')
->toggle('first_container');
$select->addCondition(Form::EQUAL, 'second')
->toggle('second_container');
$form[$select->getValue()]
->setOmitted(false); // Pouze u zvoleného checkboxlistu se nastaví omitted na false
$form->onSuccess[] = function (Form $form, ArrayHash $values) {
...
};
return $form;
}
latte šablona:
{form myForm}
{input pick}
<div id="first_container">
{label first /}
{input first}
</div>
<div id="second_container">
{label first /}
{input second}
</div>
{input submit}
{/form}
Hodnoty checkboxů se ti pak sice odesílají, ale nette je ignoruje :)
Nebo potom doporučím ty checkboxy načítat dynamicky třeba snippetem. Inspiraci bys mohl najít ve článku o selectboxech
Editoval Barvoj (23. 8. 2016 17:34)