Vymazat označené řádky (dynamický počet checkboxů)
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- klasyc
- Člen | 14
Zdravím milovníky Nette,
jak byste řešili formulář uvedený v nadpisu vlákna? Představte si třeba seznam e-mailů, kde se vždycky na začátku řádku zobrazí zaškrtávací pole, a dole bude tlačítko „vymazat označené“.
Jako nejjednodušší řešení mi přišlo vytvořit checkboxy až přes Latte (id se odvodí od id řádku), ale nevím, jak se pak dostat k hodnotám checkboxů v presenteru, protože o nich Nette neví.
Díky za nápady
Honza
- Ot@s
- Backer | 476
- práce pro addDynamic
- ruční přístup (do presenteru)
protected function createComponentMyForm() {
$form = new Form();
// cvicne data
$list = array(1=>'pokus@email.cz',2=>'karel@post.cz');
// v praxi: $list = $this->getModel('mailinfo')->getRegEmail();
$fcont = $form->addContainer('delete');
foreach($list as $k=>$e) {
$fcont->addCheckbox($k, 'Odstranit '.$e);
}
$form->addSubmit('doit', 'Vybrane smazat')
->onClick[] = callback($this, 'deleteEmailSubmitted');
return $form;
}
public function deleteEmailSubmitted($btn) {
$val = $btn->form->getValues();
// zde zpracuj obsah $val['delete']
// tj. napr. $this->getModel('mailinfo')->deleteFields( $val['delete'] );
$this->flashMessage('Vybrane zaznamy byly smazany');
$this->redirect('this');
}
Šablona:
- „automaticky“
{control myForm}
- ručně
{$myform->render('begin')}
<ul n:foreach="$myForm['delete']->getComponents() as $f">
<li>{$f->control} {$f->label}</li>
</ul>
<p>{$myform['doit']->control}</p>
{$myform->render('end')}
Do render presenteru nezapomnět přidat:
$this->template->myform = $this['myForm'];