Checkboxy v tabulce s daty

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

Potřeboval bych vyřešit formulář v tabulce s daty, kde by se u každého řádku dal zaškrtnout checkbox a pod tabulkou by bylo odesílací tlačítko, které odešle data. Tabulka se generuje podle dat s databáze. V podstatě potřebuju něco na principu phpMyAdmin, kdy si vyberu řádky a s těmi pak chci pracovat.

Popis hezký, ale nenapadá mě, jak něco takového vyřešit pomocí Nette/Forms. Nakopne mě někdo? :-), popřípadě řešil už někdo něco takového?

DataGrid nechci, na MySQL pomalý, navíc už je generování tabulky hotovo, takže potřebuju něco roztomilého, abych do tabulky nemusel moc vrtat :-).

worsik
Člen | 40
+
0
-

Jestli to chápu správně, tak ta tabulka je tvořena inputy, popř. selectboxy a na konci řádku je checkbox.
Něco podobného jsem řešil a použil jsem při vytváření formu containery.

<?php
	$sites = dibi::query($sql)->fetchPairs()
        foreach ($sites as $site_id => $site_name)
        {
            $form->addContainer($site_id);
            foreach ($services as $svc_id => $svc_name)
            {
                $form[$site_id]->addContainer($svc_id);
                $form[$site_id][$svc_id]->addText('unitcount',$svc_name)
                    ->setOption('class','count')
                    ->addCondition(Form::FILLED)
                        ->addRule(Form::NUMERIC,$numeric);
                $form[$site_id][$svc_id]->addTextArea('desc');
                $form[$site_id][$svc_id]->addText('discount','sleva')
                    ->setOption('class','discount')
                    ->getControlPrototype()->readonly = TRUE
                    ;
            }
        }
        $form->addSubmit('add_services','Potvrdit vybrané služby')
            ->onClick[] = array($this,'serviceModifyHandler');
        $form->addSubmit('cancel','Zrušit realizaci')
            ->onClick[] = array($this,'cancelRealizationHandler');
?>

K polím pak přistupuješ např. takto:

<?php
foreach ($sites as $site_id => $site_name)
	foreach ($services as $svc_id => $svc_name)
		$count = $this['modifyServices'][$site_id][$svc_id]['unitcount']->value;
?>

A form si vyrenderuješ ručně v šabloně pomocí foreach bloků

<?php
            <table class="services" id="table_{$site_id}">
                <tr>
                    <th>Služba</th>
                    <th>Jednotek</th>
                    <th>Cena za jednotku</th>
                    <th>Poznámka</th>
                    <th>Sleva (%)</th>
                </tr>
                {foreach $services as $svc_id => $svc_name}
                    <tr>
                        <td class="first">
                            {$form[$site_id][$svc_id]['unitcount']->label}
                        </td>
                        <td>
                            {$form[$site_id][$svc_id]['unitcount']->control->class($form[$site_id][$svc_id]['unitcount']->getOption('class'))}
                        </td>
                        <td>
                            {$prizes[$svc_id]},-&nbsp;Kč
                        </td>
                        <td>
                            <a class="pozn" rel="{$form[$site_id][$svc_id]['desc']->getHtmlId()}">Přidat</a>
                            {$form[$site_id][$svc_id]['desc']->control->class('pozn')}
                        </td>
                        <td class="{$form[$site_id][$svc_id]['discount']->getOption('class')}">
                            <span title="{$form[$site_id][$svc_id]['discount']->getOption('title')}">
                            {$form[$site_id][$svc_id]['discount']->control->class($form[$site_id][$svc_id]['discount']->getOption('class'))}
                            &nbsp;&nbsp;?</span>
                        </td>
                    </tr>
                {/foreach}
            </table>
?>

Je mi jasné, že bez kontextu jsou ty proměnné nejasné, ale smysl a postup práce by mohl být jasný :o)

Edit: Teď mi došlo, že tam žádný checkbox nemám, ale je to jedno, jaké form pole tam bude

Editoval worsik (3. 6. 2010 12:11)