Dynamické generování checkboxů na základě dat v formuláři
- Kaiz
- Člen | 25
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
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
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:");
}
?>