Checkbox Group – více checkboxů se společným hlavním labelem
- raketoplan2005
- Člen | 147
Ahoj, snažím se udělat Checkbox Group (list) a vykreslit ho spolu se zbytkem formuláře pomocí automatického renderu. Ten mi však bohužel vzhledem k tomu že umí jen jednotlivé checkboxy neumožní takový render, jaký bych si přál.
Strukturu bych si totiž přál mít asi takto:
<th>Otázka</th>
<td>
[checkbox1 a jeho label] <br />
[checkbox2 a jeho label]
</td>
Zkoušel jsem několik možností (více checkboxů pod sebou, CheckboxList doplněk z addonů), ale vždy jsem se někde zasekl (u checkboxlistu z addonů např. se stylováním – přiřazením ID nějakému rodiči tak, abych mohl nastylovat všechny). Můžete mi prosím poradit jak toto vyřešit, nebo alespoň s dílčími problémy?
- Jak nastavím ID nebo class rodičovi checkboxu vytvořenému v Nette přes addCheckbox, tedy například <td>?
- Jak obecně změním render pouze pro checkbox tak aby se pro ostatní prvky použil ten výchozí?
Věřím že tento problém neřeším sám, počítá se někdy s Checkbox Group (list) nastálo do Nette\Forms?
Děkuji!
Editoval raketoplan2005 (9. 3. 2012 22:49)
- Jan Endel
- Člen | 1016
Vezmu tu otázku trošku ze široka:
Osobně tuto problematiku řeším tak, že sice formulář vykresluju ručně
ale využívám dost dědičnosti šablon. Takže ve výsledku to vypadá
nějak takto:
default.latte
{include 'form.latte', 'formName' => 'fooForm'}
form.latte
{extends '@baseForm.latte'}
{block formCheckboxes}
<tr>
<td class="otherClass">{label $component->name /}:</td>
<td>{input $component->name}</td>
</tr>
{/block}
a na závěr lehce upravený můj @baseForm.latte:
{layout none}
{form $formName}
{block formErrors}
<ul class="errors" n:if="$form->hasErrors()">
<li n:foreach="$form->errors as $error">{!$error}</li>
</ul>
{/block}
<table>
{foreach $_control[$formName]->components as $component}
{block formInformation}
{if $iterator->isLast()}
<tr>
<td colspan="2">Položky označené <span style="color:red;">*</span> jsou povinné.</td>
</tr>
{/if}
{/block}
{if (!($component instanceof \Nette\Forms\Controls\HiddenField)) && (!($component instanceof \Nette\Forms\Controls\SubmitButton)) && (!($component instanceof \Nette\Forms\Controls\SubmitButton))}
{block formComponents}
<tr>
<th style="text-align: right;">{label $component->name /}:{if $component->isRequired()}<span style="color:red;">*</span>{/if}</th>
<td>{input $component->name}</td>
</tr>
{/block}
{/if}
{if ($component instanceof \Nette\Forms\Controls\Checkbox)}
{block formCheckboxes}
<tr>
<th style="text-align: right;">{label $component->name /}:{if $component->isRequired()}<span style="color:red;">*</span>{/if}</th>
<td>{input $component->name}</td>
</tr>
{/block}
{/if}
{if ($component instanceof \Nette\Forms\Controls\SubmitButton)}
{block formSubmit}
<tr>
<td colspan="2" style="text-align: center">{input $component->name}</td>
</tr>
{/block}
{/if}
{/foreach}
</table>
{/form}