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
+
0
-

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("&amp;","&");
    $.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("&amp;","&");
    $.nette.ajax({
        type: 'GET',
        url: link,
        data: {
            'druh': $('#frm-postForm-Druh :selected').val(),
            'vyrobce': $('#frm-postForm-Vyrobce :selected').val()
        }
    });
});
{/define}