Checkbox Group – více checkboxů se společným hlavním labelem

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
raketoplan2005
Člen | 147
+
0
-

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?

  1. Jak nastavím ID nebo class rodičovi checkboxu vytvořenému v Nette přes addCheckbox, tedy například <td>?
  2. 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
+
0
-

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}