Dva na sobě závislé CheckBoxy
- Mas3r
- Člen | 116
zdar, zkouším:
<?php
$form = new AppForm($this, 'form');
$form->addGroup();
$form->addHidden('id');
$form->addText('title', 'Název')->addRule(Form::FILLED, 'Prosím zadejte název');
$form->addCheckbox('predefined', 'Použít předdefinované hodnoty');
$form->addCheckbox('text', 'Použít textovou hodnotu');
$form->getComponent('predefined')->addCondition($form['text'], Form::EQUAL, TRUE)->addRule(Form::FILLED, 'Parametr nemůže být zároveň předdefinovaný a textový.');
$form->addSubmit('submit1', 'Vložit');
$form->onSubmit[] = array($this, 'handleSaveParam');
?>
zahlásí
InvalidArgumentException
Unknown operation for control ‚predefined‘.
Problém je v addCondition, ale proč,… netuším :(
Editoval Mas3r (7. 12. 2008 20:43)
- Mas3r
- Člen | 116
To bohužel taky nefunguje. Jinak vycházel jsem z:
<?php
$form = new Form();
$form->addText('name', 'Your name:')
->addRule(Form::FILLED, 'Enter your name');
$form->addText('age', 'Your age:', 5)
->addRule(Form::FILLED, 'Enter your age')
->addRule(Form::NUMERIC, 'Age must be numeric')
->addRule(Form::RANGE, 'Age must be in range from %d to %d', array(10, 100));
$form->addCheckbox('send', 'Shipping address:')
->addCondition(Form::EQUAL, TRUE)
->toggle('sendBox'); // toggle HTML element 'sendBox'
$form->addText('email', 'Email:', 35)
->setEmptyValue('@')
->addCondition(Form::FILLED) // conditional rule: if is email filled, ...
->addRule(Form::EMAIL, 'E-mail is not valid'); // ... then check email
$form->addText('city', 'City:', 35)
->addConditionOn($form['send'], Form::EQUAL, TRUE) // if $form['send'] is checked
->addRule(Form::FILLED, 'Enter your shipping address'); // $form['city'] must be filled
$form->addSelect('country', 'Country:', $countries)->skipFirst(); // skip first option
// must be declared, if you want use skipFirst
$form['country']->addRule(Form::FILLED, 'Select your country');
?>
EDIT: asi bych řekl, že na CheckBoxu nejde zavolat addCondition na jiný checkbox
Editoval Mas3r (7. 12. 2008 21:31)
- Jod
- Člen | 701
Ja používam pri uploade súborov s nadpisom niečo takéto
<?php
$form->addFile('document', 'Dokument');
$form->addText('name', 'Názov')
->addConditionOn($form['document'], Form::FILLED)
->addRule(Form::FILLED, 'Vyplňte názov dokumentu');
?>
Či som teraz mimo o čom tu hovoríte? :D bo je už dosť hodin, treba sa uložiť na kute ,)
Editoval Jod (8. 12. 2008 1:05)
- Mas3r
- Člen | 116
Kombinace Text + CheckBox je asi OK, ale ne 2 Checkboxy …
<?php
$form->getComponent('predefined')->addCondition(Form::EQUAL, TRUE)->addRuleFor($form['text'], Form::EQUAL, 'Parametr nemůže být zároveň předdefinovaný a textový.', TRUE);
$form->getComponent('text')->addCondition(Form::EQUAL, TRUE)->addRuleFor($form['predefined'], Form::EQUAL, 'Parametr nemůže být zároveň předdefinovaný a textový.', TRUE);
?>
Ani toto nefaká.
Editoval Mas3r (8. 12. 2008 19:44)
- LuKo
- Člen | 116
Tato otázka mě napadla hned při prvním pohledu na Tvůj kód, ale raději jsem se neptal, protože v tom asi bude nějaký účel. Ale když vidím, jak se s tím trápíš, nedá mi to se nezeptat: chápu-li to správně, potřebuješ mít volbu pro buď předdefinovaný, nebo textový vstup. Proč nepoužiješ přepínač (radio)?
$form->addRadioList('typ', 'Použít hodnoty:', array('predefined' => 'předdefinované', 'text' => 'textové'));
- Tomik
- Nette Evangelist | 485
LuKo napsal(a):
Tato otázka mě napadla hned při prvním pohledu na Tvůj kód, ale raději jsem se neptal, protože v tom asi bude nějaký účel. Ale když vidím, jak se s tím trápíš, nedá mi to se nezeptat: chápu-li to správně, potřebuješ mít volbu pro buď předdefinovaný, nebo textový vstup. Proč nepoužiješ přepínač (radio)?
$form->addRadioList('typ', 'Použít hodnoty:', array('predefined' => 'předdefinované', 'text' => 'textové'));
Taky mě to napadlo, s tím, že na přepínač by šel navázat javascript, který by případný textový prvek schovával/ukazoval. A při zpracování by se obsah textového pole bral v úvahu, jen kdyby bylo vybráno „text“.
- LuKo
- Člen | 116
Tomik napsal(a):
Taky mě to napadlo, s tím, že na přepínač by šel navázat javascript, který by případný textový prvek schovával/ukazoval. A při zpracování by se obsah textového pole bral v úvahu, jen kdyby bylo vybráno „text“.
$form->addRadioList('typ', 'Použít hodnoty:', array('predefined' => 'předdefinované', 'text' => 'textové'))
->addCondition(Form::EQUAL, 'text')
->toggle('textbox');
Myslíš něco takového? (nezkoušel jsem, pouze jsem intuitivně použil již dříve napsané)