Dynamické přidání prvku do formuláře
- ForestCZE
- Člen | 209
Ahoj, mám tuto komponentu:
protected function createComponentSurvey()
{
$form = new Form;
$choices = ['yes' => 'Ano', 'no' => 'Ne'];
$reason = $form->addRadioList('choice', 'Odpověď:', $choices);
if($reason->value == "no"){
$form->addTextArea("messagereason", "Odůvodnění:");
}
$form->addSubmit('vote', 'Hlasovat')->setDisabled(true);
$form->addProtection('Vypršel časový limit!');
$form->onSuccess[] = [$this, 'surveySucceeded'];
return $form;
}
Jde mi to, že mám dvě volby v RadioListu a pokud vyberu druhou, tak aby se přidala TextArea. Musí se to nějak překreslovat, použít jQuery nebo by to mělo takto fungovat s tím, že tam je pouze něco špatně? Díky :)
EDIT: Během čekání na odpověď jsem zkusil něco jako:
$form->addRadioList('choice', 'Odpověď:', $choices)
->addCondition($form::EQUAL, 'no')
->toggle();
Akorát teda nevím, co dosadit do toggle. Podle návodu to má být ID divu. Netuším, jakého divu, když TextAreu chci přidat pomocí addTextArea :-D
Editoval ForestCZE (22. 10. 2017 16:35)
- duke
- Člen | 650
Příklad:
PHP:
$form->addCheckbox('changePassword', 'změnit heslo')
->addCondition($form::EQUAL, TRUE)
->toggle('changePasswordToggle');
Latte:
<div id="changePasswordToggle"{if !$_form->getToggles()[changePasswordToggle]} style="display:none"{/if}>
<label n:name="password" class="control-label">{$_form[password]->caption}</label>
<input n:name="password" class="form-control">
</div>
Kód
{if !$_form->getToggles()[changePasswordToggle]} style="display:none"{/if}
není nezbytný, neboť při jeho absenci dojde ke skrytí obsahu následně
javascriptem. Takhle je to však uživatelsky přívětivější.
- Mistrfilda
- Člen | 76
Ahoj,
zkus se podivat na tento navod , myslim ze je to presne to co hledas :)
Id k prvku ktery takto vykreslujes muzes pridat pomoci
$form->addTextArea('note', 'Note')
->setOption('id', 'text-note');
a pak toggle pres
$form->addRadioList('choice', 'Odpověď:', $choices)
->addCondition($form::EQUAL, 'no')
->toggle('text-note');
Editoval Mistrfilda (23. 10. 2017 11:00)
- ForestCZE
- Člen | 209
Mistrfilda napsal(a):
Ahoj,
zkus se podivat na tento navod , myslim ze je to presne to co hledas :)
Id k prvku ktery takto vykreslujes muzes pridat pomoci
$form->addTextArea('note', 'Note') ->setOption('id', 'text-note');
a pak toggle pres
$form->addRadioList('choice', 'Odpověď:', $choices) ->addCondition($form::EQUAL, 'no') ->toggle('text-note');
Na ten návod jsem samozřejmě koukal :) Akorát jsem právě nevěděl, co s tím Latte, když vykresluju přes control. Ještě jsem to nezkusil, ale dává to smysl, co jsi mi poradil. Jsem zvyklý používat SetAttribute. Je to jedno? Každopádně moc díky :)
EDIT: Funguje to parádně! Opravdu moc děkuju :)
Editoval ForestCZE (23. 10. 2017 13:36)