Manuální vykreslení dynamického kontejneru
- lukendo
- Člen | 96
Zdravím mám takovýto formulář s kontejnerem, ale nevím ani jestli to je dobrá volba takhle použít. Nicméně nedaří se mi jej manuálně vykreslit kvůli stylování. Mám to v tom kontejneru právě proto abych mohl při odeslání postupně pracovat s jednotlivými hodnotami toho checkboxu.
$users = $control->addContainer('users');
foreach($usersRowsSelected as $member)
{
$users->addCheckBox($member->id, $member->name)
->setValue($member->notify);
}
return $control;
Vykreslování (Zkoušel jsem všelijaké varianty s foreachem, různým
indexováním ale většinou to vyhodí chybu že $u
je
null
)
{form setUsersStatusForm}
{foreach $form['users'] as $u}
{$u->getControlPart()}
{$u->getLabelPart()}
{/foreach}
{/form}
- lukendo
- Člen | 96
CZechBoY napsal(a):
Pouzij CheckboxList.
tak jsem to teda použil, ale ten formulář se pak s tím checkboxlistem neodešle
$users = array();
foreach ($usersRowsSelected as $row) {
$users[$row->id] = $row;
}
$control->addCheckboxList('users_id', '', $users);
return $control;
Latte:
{form setUsersStatusForm class => 'ui form'}
{foreach $form['users_id']->items as $row}
<div class="field">
<div class="ui checkbox">
{if $row->notify}
<input type="checkbox" name="{$row->id}" checked="">
{else}
<input type="checkbox" name="{$row->id}">
{/if}
<label for="{$row->id}">{$row->name}</label>
</div>
{dump $row}
</div>
{/foreach}
{input send}
{/form}
- CZechBoY
- Člen | 3608
Odešle, ale ty tam ten checkboxlist nijak nerenderuješ a asi ani
neodesíláš…
Myslim že by se to mělo dělat nějak tahle:
{form setUsersStatusForm class => 'ui form'}
{foreach $form['users_id']->items as $row}
<div class="field">
<div class="ui checkbox">
{if $row->notify}
<input type="checkbox" n:name="users_id:$row->id" checked="">
{else}
<input type="checkbox" n:name="users_id:$row->id">
{/if}
<label for="{$row->id}">{$row->name}</label>
</div>
{dump $row}
</div>
{/foreach}
{input send}
{/form}
Editoval CZechBoY (21. 8. 2016 14:10)
- lukendo
- Člen | 96
CZechBoY napsal(a):
Odešle, ale ty tam ten checkboxlist nijak nerenderuješ a asi ani neodesíláš…
Myslim že by se to mělo dělat nějak tahle:{form setUsersStatusForm class => 'ui form'} {foreach $form['users_id']->items as $row} <div class="field"> <div class="ui checkbox"> {if $row->notify} <input type="checkbox" n:name="users_id:$row->id" checked=""> {else} <input type="checkbox" n:name="users_id:$row->id"> {/if} <label for="{$row->id}">{$row->name}</label> </div> {dump $row} </div> {/foreach} {input send} {/form}
díky, funguje :)
edit: akorát když to odešlu tak se uloží jenom ty záznamy které se
zašktrtli, nejde to nějak aby se odeslali i ty co se změnili z true
na false?
Editoval lukendo (21. 8. 2016 14:18)
- lukendo
- Člen | 96
Tak jsem to vyřešil, ale trochu punkově :D jelikož ten form odešle jenom ty checkboxy co byli nastaveny, tak nejdříve všechny řádky v db nastavím na false a pak projedu ty checkboxy co mi přišli a ty odpovídající řádky nastavím na true. Je mi jasný že se může stát, že se po nastavení všeho na false může přerušit spojení z databází, ale jedná se maximálně o 50 řádků, tak by to nemuselo mít v případě tohoto problému fatální následky.
- Pavel Kravčík
- Člen | 1196
Nebo můžeš nejdříve vytáhnout původní hodnoty, srovnat je s novými a ten výsledek následně uložit. I kdybys ztratil spojení (edge-case) tak o ty data nepřijdeš. Maximálně o ty nově zadaná, což Tě bude trápit méně hádám díky setDefaults().