Neprovadeni funkce pro ulozeni
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- aja86
- Člen | 2
Zdravím zdejší diskutující. Narazil jsem na problém při odesílání
formuláře a moc prosím o radu. Věc se má tak, že si edituji data
z databaze a v editacnim formulari mam zavislý selectbox. Potíž nastává
při odeslání, někdy se funkce po odeslání provede jindy vubec
v závislosti na tom co ve vazanem selectboxu vyberu (zkouším na selectboxu
Misto). Ulozeni testuji formou dump hodnot.
Budu moc vděčný za jakoukoliv radu, nebo popstrčení.
Presenter:
//Funkce pro naplnovani zavisleho selectboxu - MISTO
public function handleMistoChange($typ)
{
if ($typ == '1') {
$Mista = $this->database->table('vertigo_sklad')->fetchPairs('ID_Sklad', 'Sklad');
$this['postForm']['Misto']->setPrompt('Vyber sklad')->setItems($Mista);
}
else if ($typ == '2') {
$Mista = $this->database->table('vertigo_pop')->fetchPairs('ID_Pop', 'Pop');
$this['postForm']['Misto']->setPrompt('Vyber pop')->setItems($Mista);
}
else if ($typ == '3') {
$Mista = $this->database->table('vertigo_zakaznik')->fetchPairs('ID_Zakaznik', 'Cislo');
$this['postForm']['Misto']->setPrompt('Vyber zakaznika')->setItems($Mista);
}
else {
$this['postForm']['Misto']->setPrompt(' --- ')->setItems(array());
}
$this->invalidateControl('mistoSnippet');
}
//Funkce pro naplnovani zavisleho selectboxu - ZARIZENI
public function handleZarizeniChange($druh, $vyrobce)
{
$zarizeni = $this->database->query('
SELECT z.*
FROM vertigo_zarizeni z
WHERE z.id_vyrobce = '.$vyrobce.' AND z.id_druh = '.$druh.'
')->fetchPairs('ID_Zarizeni', 'Zarizeni');
$this['postForm']['Zarizeni']->setPrompt('Vyber zařízení')->setItems($zarizeni);
$this->invalidateControl('zarizeniSnippet');
}
//Funkce formulare pro vkladani a editaci dat
protected function createComponentPostForm()
{
$form = new Form;
$form->addText('EVC', 'EVČ:');
$form->addSelect('ID_DVstup', 'Vstupní doklad:', $this->database->table('vertigo_dvstup')->fetchPairs('ID_DVstup', 'Doklad'));
//$form->addSelect('ID_DVystup', 'Výstupní doklad:', $this->database->table('vertigo_dvystup')->fetchPairs('ID_DVystup', 'Doklad'));
$form->addSelect('Druh', 'Druh:', $this->database->table('vertigo_zdruh')->fetchPairs('ID_Druh', 'Druh'));
$form->addSelect('Vyrobce', 'Výrobce:', $this->database->table('vertigo_vyrobce')->fetchPairs('ID_Vyrobce', 'Vyrobce'));
$form->addSelect('Zarizeni', 'Zařízení:');
$form->addText('MAC', 'MAC:');
$form->addText('SN', 'SN:');
$form->addText('Zaruka', 'Záruka:');
$form->addText('Cena', 'Cena:');
$form->addSelect('Typ', 'Typ místa:', array(1 => 'Sklad', 2 => 'Pop', 3 => 'Zakaznik'));
$form->addSelect('Misto', 'Místo:');
$form->addTextArea('Poznamka', 'Poznámka:');
$form->addSubmit('send', 'Uložit');
$form->onSuccess[] = $this->postFormSucceeded;
return $form;
}
//Funkce pro ulozeni dat do databaze
public function postFormSucceeded($form)
{
$values = $form->getHttpdata();
$ID_MZarizeni = $this->getParameter('ID_MZarizeni');
unset($values['send']);
/*
if ($ID_MZarizeni) {
$post = $this->database->table('vertigo_mzarizeni')->get($ID_MZarizeni);
$post->update($values);
$this->flashMessage("Změny uloženy.", 'success');
}
$this->redirect('default');
*/
dump($values);
dump($ID_MZarizeni);
}
//Funkce pro naplneni formulare v pripade editace
public function actionEdit($ID_MZarizeni)
{
//Nacteni ulozenych hodnot z databaze
$vychozi = $this->database->query('
SELECT m.*, z.Zarizeni, v.ID_Vyrobce, d.ID_Druh, vs.Doklad
FROM vertigo_mzarizeni m, vertigo_zarizeni z, vertigo_vyrobce v, vertigo_zdruh d, vertigo_dvstup vs
WHERE m.ID_MZarizeni = '.$ID_MZarizeni.'
AND m.ID_Zarizeni = z.ID_Zarizeni
AND z.ID_Vyrobce = v.ID_Vyrobce
AND z.ID_Druh = d.ID_Druh
AND m.ID_DVstup = vs.ID_DVstup
')->fetch();
//Preindexovani polozek z pole pro lepsi orientaci
$vychozi['Druh'] = $vychozi['ID_Druh'];
$vychozi['Vyrobce'] = $vychozi['ID_Vyrobce'];
$vychozi['Zarizeni'] = $vychozi['ID_Zarizeni'];
$vychozi['Misto'] = $vychozi['ID_Misto'];
unset($vychozi['ID_Druh']);
unset($vychozi['ID_Vyrobce']);
unset($vychozi['ID_Zarizeni']);
unset($vychozi['ID_Misto']);
//Nacteni hodnot pro zavisle selectboxy - ZARIZENI
$hodnoty['Zarizeni'] = $this->database->query('
SELECT z.*
FROM vertigo_zarizeni z
WHERE z.id_druh = '.$vychozi['Druh'].' AND z.id_vyrobce = '.$vychozi['Vyrobce'].'
')->fetchPairs('ID_Zarizeni', 'Zarizeni');
//Nacteni hodnot pro zavisle selectboxy - MISTA
if ($vychozi['Typ'] == '1'){
$hodnoty['Misto'] = $this->database->query('
SELECT m.ID_Sklad, m.Sklad
FROM vertigo_sklad m
')->fetchPairs('ID_Sklad', 'Sklad');
}
else if ($vychozi['Typ'] == '2'){
$hodnoty['Misto'] = $this->database->query('
SELECT m.ID_Pop, m.Pop
FROM vertigo_pop m
')->fetchPairs('ID_Pop', 'Pop');
}
else if ($vychozi['Typ'] == '3'){
$hodnoty['Misto'] = $this->database->query('
SELECT m.ID_Zakaznik, m.Cislo
FROM vertigo_zakaznik m
')->fetchPairs('ID_Zakaznik', 'Cislo');
}
//Odeslani dat do formulare
$this['postForm']['Zarizeni']->setItems($hodnoty['Zarizeni']);
$this['postForm']['Misto']->setItems($hodnoty['Misto']);
$this['postForm']->setDefaults($vychozi);
}
Latte:
{define #content}
<h1>Upravit výrobce</h1>
{form postForm}
{label EVC /}{input EVC}<br>
{label ID_DVstup /}{input ID_DVstup}<br>
{label Druh /} {input Druh}<br>
{label Vyrobce /} {input Vyrobce}<br>
{snippet zarizeniSnippet}
{label Zarizeni /} {input Zarizeni}<br>
{/snippet}{include #js_zarizeni}
{label MAC /} {input MAC}<br>
{label SN /} {input SN}<br>
{label Zaruka /} {input Zaruka}<br>
{label Cena /} {input Cena}<br>
{label Typ /} {input Typ}<br>
{snippet mistoSnippet}
{label Misto /} {input Misto}<br>
{/snippet}{include #js_misto}
{label Poznamka /} {input Poznamka}<br>
{input send}
{/form}
{/define}
{define #js_misto}
<script type="text/javascript">
{include #jsMisto, input => Typ, link => mistoChange}
</script>
{/define}
{define #js_zarizeni}
<script type="text/javascript">
{include #jsZarizeni, input => Druh, link => zarizeniChange}
{include #jsZarizeni, input => Vyrobce, link => zarizeniChange}
</script>
{/define}
{define #jsMisto}
$('#{$control["postForm"][$input]->htmlId}').on('change', function() {
link = '{link $link."!"}';
link = link.replace("&","&");
$.nette.ajax({
type: 'GET',
url: link,
data: {
'typ': $('#frm-postForm-Typ :selected').val()
}
});
});
{/define}
{define #jsZarizeni}
$('#{$control["postForm"][$input]->htmlId}').on('change', function() {
link = '{link $link."!"}';
link = link.replace("&","&");
$.nette.ajax({
type: 'GET',
url: link,
data: {
'druh': $('#frm-postForm-Druh :selected').val(),
'vyrobce': $('#frm-postForm-Vyrobce :selected').val()
}
});
});
{/define}