Alternative RadioList & CheckboxList for Nette Framework
New BSD
Nette 2.0.0
- Get the source code from Github or via Composer (
vojtech-dobes/nette-forms-inputlist
). - Register
VojtechDobes\NetteForms\InputListExtension
as extension for$configurator
.
$configurator->onCompile[] = function ($configurator, $compiler) {
$compiler->addExtension('inputlist', new VojtechDobes\NetteForms\InputListExtension);
};
$form->addMultiRadio('sex', 'Sex:', array(
'male' => 'Male',
'female' => 'Female',
));
Method's name was chosen to not interfere with native
addRadiolist
.
$checkboxlist = $form->addMultiCheckbox('topics', 'I like:', array(
'l' => 'lifestyle',
'm' => 'military',
'c' => 'computers',
'f' => 'flowers',
));
$checkboxlist->setDefaultValue(array('l', 'm')); // lifestyle, military
$checkboxlist->getValue() === array(0 => 'l', 1 => 'm')
Both RadioList
and CheckboxList
provide standard mechanism like getControlPrototype
etc. You can also force omitting of last separator:
$radiolist->omitLastSeparator();
There is special new macro for Latte templates: {inputlist}
. It behaves exactly like {foreach}
, but it's specifically design to work with *List
form elements.
{form formName}
{inputlist sex as $key => $label}
{input} {label /} {sep}<br>{/sep}
{/inputlist}
{/form}
Macros {input}
and {label}
behave the same way as always, but when used without element identificator, they will render proper elements for iteration specific item. If you use it with identificator, it will render appropriate element from form.
{form formName}
{inputlist sex as $key => $label}
{input} {label /}<br>
{input send} {* standard button, no problem *}
{/inputlist}
{/form}
You can add HTML attributes to them as usually.
{form formName}
{inputlist sex as $key => $label}
{input class => 'input-radio'} {label}{$label}{/label}<br>
{/inputlist}
{/form}
Attribute version of {inputlist}
is also possible:
{form formName}
<ul n:inner-inputlist="sex as $key => $label">
<li>{input} {label /}</li>
</ul>
{/form}
Here supported rules are listed:
Form::FILLED | At least one box must be checked. |
---|---|
Form::LENGTH | Exact amount of boxes that must be checked. |
Form::MIN_LENGTH | Minimum amount of boxes that must be checked. |
Form::MAX_LENGTH | Maximum amount of boxes that must be checked. |
Form::RANGE | Minimum and maximum amount of boxes that must be checked. |
Form::REGEXP | Checks if selected checkbox values match regular expression. |
Form::FILLED | One button must be selected. |
---|---|
Form::REGEXP | Checks if selected radio value matches regular expression. |
All rules are also supported on client-side.