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
+
0
-

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
+
0
-
  1. práce pro addDynamic
  2. 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:

  1. „automaticky“
{control myForm}
  1. 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'];