Odeslání formuláře s propojenými selectboxy

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

Zdravím, narazil jsem na problém. Konečně se mi podařilo rozchodit propojení selectboxů, ale hned potom přišel zádrhel, když jsem potřeboval data uložit do databáze.
Vstupní formulář:

<?php
public function createComponentEditCalcForm($name) {
  ...
  $form = new AppForm($this, $name);
  ...
  $form->addSelect('energie_typ_id', 'Typ odběru', $typOdb)->setDefaultValue($row->energie_typ_id)->skipFirst('Vyberte typ odběru');
  $form->addSelect('sazba_id', 'Sazba za distribuci', $sazba)->setDefaultValue($row->sazba_id)->skipFirst('Vyberte sazbu');
  $form->addSubmit('send', 'Uložit');
  $form->onSubmit[] = callback($this, 'editCalcFormSubmitted');
  return $form;
}
?>

Při výběru prvního selectboxu se z databáze natáhnou data podle toho co se vybere, to funguje jak má.

V šabloně je:

<script>
$(function() {
  $('#frmeditCalcForm-energie_typ_id').change(function () {
    loadData($(this).val());
  });
  function loadData(value) {
    jQuery.get({link loadSazby!}, {"value": value}, function(data) {
      jQuery('#frmeditCalcForm-sazba_id').replaceWith(data);
    }, "html");
  }
});
</script>

A nakonec asi kámen úrazu je tato funkce která se stará o načítání závislého selectboxu

<?php
public function handleLoadSazby() {
  $form = $this->getComponent('editCalcForm');
  $sazba_id = $this->getParam('value');
  $data = \dibi::query("SELECT id, name FROM [energie_sazba] WHERE typ_id=%i", $sazba_id)->fetchPairs("id", "name");
  $form['sazba_id']->setItems($data)->skipFirst('Vyberte sazbu');
  echo $form['sazba_id']->getControl();
  $this->terminate();
}
?>

V šabloně se data naplní jak mají, hodnoty selectboxu mají např data
<option value=„10“>C01d</option>
ale problém je asi v <?php $form[‚sazba_id‘] ?> protože při odeslíná formuláře vrací prázdnou hodnotu. Pokud se nenačte pomocí JavaScriptu tak se vše uloží jak má, ale pokud se změní první selectbox, tak i když vyberu hodnotu „10“, tak do databáze posílá
[sazba_id] = >
Nevítete někdo prosím proč to dělá? Předem děkuji za jakoukoli radu.

voda
Člen | 561
+
0
-

Použij DependentSelectBox z doplňků.

kashpi
Člen | 48
+
0
-

S tím jsem to zkoušel, ale nějak se mi nepodařilo ho pořádně rozchodit, tak jsem ho zavrhnul.
Nějaký jiný napad?

edit: konkrétně vždycky když změním první selecbox, tak se formulář odešle, což v mím případě není moc efektivní.

Editoval kashpi (28. 3. 2011 19:13)

Honza Kuchař
Člen | 1662
+
0
-

Inspirovat se tim, jak je udelany dependent-selectbox

kashpi
Člen | 48
+
0
-

No nevím jestli to dobře chápete, ono to funguje jak má, jen nevím proč při odeslání, když data načtu do <?php $form[‚sazba_id‘]->getControl();?>, tka proč je pod tím názvem neodešle. :(

Honza Kuchař
Člen | 1662
+
0
-

O to prave jde. ;) Je to bezpecnostni osetreni vstupu, ktere dependent selecbox jiste resi.

kashpi
Člen | 48
+
0
-

aha, tak na to se podívám :)
zatím děkuji