Dynamické generování checkboxů na základě dat v formuláři

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

Dobrý den,
nevím jak řešit následující situaci. Mám formulář s dny(pondělí,úterý…) a rozmezí(2012–01–01 až 2012–02–02). Na základě zaškrtnutých checkboxů a vybraných datech, bych chtěl vygenerovat další stránku, kde budou ony data v podobě checkboxů aby si z nich mohl administrátor vybrat přesně ty co potřebuje.
Jak vygenerovat ty datumy vím, ale nevím jak po odeslání formuláře předat další stránce pole těch datumů.

Nebo bych rád vygeneroval ty datumy pod formulář třeba ajaxem, akorát to už vůbec netuším. Pokud vás napadne jak tohle řešit nějak jinak, prosím dejte vědět

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Pod formulář bych si dal do šablony snippet days. Formulář bych zaajaxoval. Do snippetu bych dal v případě odeslání prvního formuláře vykreslovat druhý formulář, který bych sestavil na základě dat odeslaných prvním formulářem. V případ ajaxového odeslání prvního formuláře bych invalidoval snippet. A je to :).

{control firstForm}

{snippet days}
	{ifset $firstFormSent}
		{control secondForm}
	{/ifset}
{/snippet}

Obsluha prvního formuláře (zavěšeno na onSuccess[]):

public function processFirstForm($form)
{
	$values = $form->values;
	// sestavení druhého formuláře podle získaných hodnot
	$this->template->firstFormSent = TRUE;
	if ($this->isAjax()) {
		$this->invalidateControl('days');
	}
}
Kaiz
Člen | 25
+
0
-

Díky moc, nakonec se mi povedlo to rozchodit podle tvého nápadu, jenom mám takový problém, že data z toho druhého formuláře se neodesílají do metody která je nastavená.

<?php
public function createComponentGeneratedDatesForm() {
        $form = new Form();
        if (!empty($this->generatedDates)) {
            foreach ($this->generatedDates as $date) {
                // Dekoduje string od pomlček mezer dvojteček a nahradí to písmeny
                $name = $this->encode($date);
                $form->addCheckbox($name, $date)
                        ->setDefaultValue(true);
            }
            $form->addText('name', 'Název:')
                    ->addRule(Form::FILLED, 'Název aktivity je povinná položka');

            $form->addText('ageFrom', 'Od(v měsících):')
                    ->addRule(Form::NUMERIC, 'Měsíce udávejte pouze jako číslo')
                    ->addRule(Form::FILLED, 'Věk je povinná položka');

            $form->addText('ageTo', 'Do(v měsících):')
                    ->addRule(Form::NUMERIC, 'Měsíce udávejte pouze jako číslo')
                    ->addRule(Form::FILLED, 'Věk je povinná položka');

            $form->addText('variability', 'Limit(v měsících):')
                    ->setDefaultValue('0')
                    ->addRule(Form::NUMERIC, 'Měsíce udávejte pouze jako číslo');

            $form->onSubmit[] = callback($this, 'addActivityProcess');

            $form->addSubmit('submitButton', 'Přidat');
        }

        return $form;
    }

public function addActivityProcess(Form $form) {
        if ($this->user->isInRole('admin')) {
            $values = $form->getHttpData();
            dump($values);
            dump($selectedDates);
        }else {
            dump("to mě poser");
        }
        $this->flashMessage('Přidáno');
        $this->redirect("Homepage:");
    }
?>