DependentSelectBox – NULLova hodnota promenne zavisleho SELECT boxu po odeslani formulare
- moonlite
- Člen | 8
Narazil jsem na nasledujici problem (a ani po nekolika hodinach nenasel odpoved).
Pouzivam doplnek "DependentSelectBox ":https://componette.org/search/?… , ktery funguje v pohode. Avsak pri predchozim naplneni zavisleho SELECT boxu hodnotami vznikne urcity problem.
O co jde: Ve formulari jsou dva SELECT boxy – viz nasledujici kod:
public function createComponentMyForm($name) {
$form = new AppForm($this, $name);
$data = $this->filter->loadDataFromDatabase();
$form->addSelect("select1", "Výběr 1", $data);
$form->addDependentSelectBox("select2", "Výběr 2", $form["select1"], callback($this, "getValuesSelect2"));
if($this->isAjax())
$form["select2"]->addOnSubmitCallback(callback($this, "invalidateControl"), "formSnippet");
$form->addSubmit("final_submit", "Hodnoty !")
->onClick[] = callback($this, "submitForm");
return $form;
}
Prvni je obycejny SELECT box, druhy je zminovany DependentSelectBox. Pri vyberu hodnoty z prvniho SELECTu se do druheho spravne nactou z databaze hodnoty pro druhy SELECT box (to zajisti funkce getValuesSelect2).
Mejme napr. situaci, ze prvni SELECT box bude kraj v CR a druhy SELECT box budou krajska mesta. Uzivatel zvoli kraj a mesto a formular potvrdi. Nyni ale potrebuji tento formular zobrazit znovu uz vyplneny a s vybranym krajem a mestem.
Konkretni stranku nacitam jako /presenter/ajaxtest/, proto jsem do presenteru pridal tuto funkci, ktera zjisti ulozene ID kraje i ID mesta. Tato funkce v prvnim SELECT boxu jen nastavi vybrani konkretniho kraje, do druheho SELECT boxu nasype data a vybere konkretni kraj.
public function actionAjaxtest(){
// nastaveni vyberu u prvniho SELECT boxu dle ID ziskaneho z databaze
// ... kod ...
//
if(!$this->isAjax()){
$mesta = $this->filter->loadDataFromDatabase($id_kraje)->fetchPairs('kraj_id', 'nazev');
$this['myForm']['id_mesto']->setItems($mesta);
// jeste volam funkci pro zobrazeni ulozeneho mesta v SELECT boxu
// ... kod ...
//
}
}
Pote pri zmene kraje stale funguje zmena mesta v druhem SELECT boxu, avsak pri odeslani formulare ma ID mesta hodnotu NULL!!! (Pri pouziti Debug::dump($button->getForm()->getValues());
Pritom po odeslani formulare je ve Firebugu pro hodnoty (ktere se odesilaji POSTem) jasne videt, ze id_kraj i id_mesto maji IDcka nastaveny spravne!
Netusim, kde je chyba. Vim jen, ze kdyz nenaplnuju pred zobrazenim druhy SELECT box, je vse OK.
Delam nekde chybu, nebo jde o nejaky bug?
Pokud postupuju spatne, poradte prosim, jak obejit to, abych umel zobrazit oba SELECT boxy jiz vyplnene. Mozna nepostupuji spravne…
Diky! :-)
Editoval moonlite (6. 3. 2011 9:10)
- moonlite
- Člen | 8
Jeste pro doplneni – zavisly SELECT box musim predvyplnit hodnotama kvuli tomu, ze pri nacteni formular je tento zavisly SELECT box pochopitelne prazdny. Nevim, ale, jak jinak to udelat. Pokud by slo v prvnim SELECT boxu nastavit ID, pote nejak emulovat AJAXovy pozadavek a pote v druhem SELECT boxu (ktery jiz ma hodnoty) nastavit spravne ID, poradte prosim, jak toho docilit… :-)