Ukládání a výpis položek CheckboxListu

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

Zdravím!
Hledal jsem na fóru diskuse, které by mi pomohly, ale bohužel bezúspěšně. Jedná se mi o to, jak nejlépe uložit položky checkboxListu do databáze a poté ty zaškrknuté zase ve formuláři vypsat jako zaškrknuté a ostatní nezaškrklé. Zkusím uvést na příkladu, který mě napadl.
V presenteru při vytváření formuláře přidám checkboxList:

protected function createComponentDopravaForm()
{
	...

	$zpusobDopravy = [
            'P' => 'pěšky',
            'A' => 'autem',
            'K' => 'na kole',
            'V' => 'vlakem'
        ];
	$form->addCheckboxList('zpusob_dopravy', 'Způsob dopravy:', $zpusobDopravy);

	...

	$form->addSubmit('send', 'Uložit záznam');

	$form->onSuccess[] = [$this, 'dopravaFormSucceeded'];
	return $form;
}

Uživatel zatrhne jednotlivá pole, jak je možné se k jeho obydlí dostat. Po odeslání formuláře vložím data do databáze:

public function dopravaFormSucceeded($form, $values)
{
	$dopravaID = $this->getParameter('doprava_ID');

    if ($dopravaID) {
        $doprava = $this->dopravaManager->database->table('doprava')->get($dopravaID);
        $doprava->update($values);
    } else {
		$doprava = $this->dopravaManager->database->table('doprava')->insert([
        	...
            'zpusob_dopravy' => $values->zpusob_dopravy, // Tady možná jinak vkládat hodnoty?
            ...
        ]);
    }

    $this->flashMessage('Úspěšně uloženo.', 'success');
    $this->redirect('show', $doprava->doprava_ID);
}

Defaultně potom vypisuji záznamy z databáze do tabulky následovně (default.latte):

{block content}
<div class="table">
    {foreach $doprava as $dop}
        {first}<table>
            <tr>
                <th>ID</th>
                <th>Způsob</th>
				...
            </tr>{/first}
        	<tr>
            	<td><a n:href="Doprava:show $dop->doprava_ID">{$dop->doprava_ID}</a></td>
            	<td>{$dop->zpusob_dopravy}</td>
            	...
        	</tr>
        {last}</table>{/last}
    {/foreach}
</div>

No a mám samozřejmě i přístupný formulář, přes který je možno přidávat záznamy do databáze přímo (dopravaForm), který by se měl naplnit již vloženými daty z databáze, pokud daný záznam upravujeme. Všechna data se mi tam vloží, až právě na ten checkboxList, který nevím jak přimět, aby se vykreslil s těmi zaškrklými políčky, která byla zvolena. Editaci provádím v edit.latte, kdy si tento formulář vypíšu takto {control dopravaForm}. Tuším, že si budu muset formulář vypsat manuálně – podle dokumentace nejspíš nějak takto:

{foreach $form[gender]->items as $key => $label}
    <label n:name="gender:$key"><input n:name="gender:$key"> {$label}</label>
{/foreach}

a taky změnit vkládání keys jednotlivých checků do databáze, které tak jak je napsané neprojde kvůli tomu, že se ty klíče vloží do databáze jako další položka. Zkoušel jsem dost možností, jak toho docílit, ale žádná můj problém nevyřešila.

Snad jsem svoji situaci popsal dostatečně a dá se v tom vyznat. Je to poprvé, co píšu na nějaké forum, takže kdyžtak nějaké informace ještě doplním. Případně pokud jdu na to špatně a bylo by lepší něco předělat…

Díky všem, kteří mi pomohou!

Editoval devilshark (30. 3. 2017 0:54)