Překreslení formuláře po odeslání

n.u.r.v.
Člen | 485
+
0
-

Ahoj,
v includované šabloně mám kontaktní formulář (generovaný v presenteru) a zkouším ho odeslat ajaxově. Formulář se ajaxově odešle a zpracuje, ale už mi nějak nefunguje překreslení – ve formuláři zůstanou vyplněná data (nevyresetuje se). Formulář mám obalený v snippet který po odeslání a zpracování překesluju, ale formulář se po odeslání nevyresetuje a zůstávají v něm vyplněné odeslané hodnoty.

Dále mám pod formulářem skrytý text potvrzující odeslání, u kterého potřebuji spustit efekt .toggle(„fast“).

Můžete mi prosím poradit jak to udělat? Používám poprvé Naja.js kterou jen ve svém main.js inicializuji pomocí naja.initialize();

V presenteru:

protected function createComponentContactForm() {
        $form = new Form();
        $form->getElementPrototype()->class = 'ajax';
        $form->addText('fullname')
                ->setHtmlId('fullname')
                ->setValue('')
                ->setAttribute('class', 'form-control')
                ->setRequired('Musíte vyplnit jméno.');
        $form->addEmail('email')
                ->setAttribute('class', 'form-control')//email
                ->setValue('')
                ->setRequired('Musíte vyplnit email.');
        $form->addText('tel', 'Telefon ')
                ->setAttribute('class', 'form-control')
                ->setValue('')
                ->setRequired(FALSE);
        $form->addTextArea("message", NULL, NULL, 3)
                ->setAttribute('class', 'form-control')
                ->setValue('')
                ->setRequired("Musíte napsat sdělení.");
        $form->addSubmit('submit_contact', 'Odeslat')
                ->setAttribute('class', 'btn btn-primary');
        $form->onSuccess[] = [$this, 'contactFormSucceeded'];
        return $form;
    }

    public function contactFormSucceeded(Form $form) {
        $values = $form->getValues();
        //...
        if (!$this->isAjax()) {
            $this->redirect('this');
        } else {
            $this->redrawControl('conctactFormBlock');
        }
    }

formulář v includované šabloně (dole je div s class response, který potřebuji aby se zobrazil po odeslání):

<div class="col-md-7 frm">
        {snippet conctactFormBlock}
            <div class="shadow-wrapper">
                {form contactForm}
                    <div class="form-control mb-3">
                      <label for="fullname" class="form-label">Jméno <span class="text-danger">*</span></label>
                      <p class="invalid-feedback">Zadejte Vaše jméno</p>
                      {input fullname}
                    </div>
                    <div class="form-control mb-3">
                      <label for="email" class="form-label">Email <span class="text-danger">*</span></label>
                      <p class="invalid-feedback">Zadejte Váš e-mail</p>
                      {input email}
                    </div>
                    <div class="form-control mb-3">
                      <label for="tel" class="form-label">Telefon </label>
                      <input type="text" class="form-control" name="tel" value="">
                    </div>
                    <div class="form-control mb-3">
                      <label for="message" class="form-label">Sdělení <span class="text-danger">*</span></label>
                      <p class="invalid-feedback">Zadejte obsah sdělení</p>
                      {input message}
                    </div>
                    <div class="text-center"><button class="btn btn-primary" type="submit">Odeslat</button></div>
                {/form}
                <div class="response"><h3>Vaše zpráva byla úspěšně odeslána.</h3>
                    <p>Budeme se vašemu požadavku věnovat v nejbližší době</p>
                    <p><strong>Děkujeme Vám!</strong><br />Tým Proškoly.cz<br />&nbsp;</p>
                </div>
            </div>
        {/snippet}
      </div>

Díky

n.u.r.v.
Člen | 485
+
0
-

ahoj, tak už mi to částečně jde – musím překreslovat celou includovanou šablonu. Problém je, že se mi stále neresetuje formulář. Jak tohle vyřešit? Díky

Pepino
Člen | 250
+
+2
-
$form->reset();

Editoval Pepino (22. 3. 10:44)

n.u.r.v.
Člen | 485
+
0
-

Díky moc, funguje to… Ještě by mě zajímalo, jak to udělat, abych nemusel překreslovat celou vloženou šablonu, ale jen část v ní? Díky

m.brecher
Generous Backer | 794
+
0
-

abych nemusel překreslovat celou vloženou šablonu, ale jen část v ní?

Použij {snippetArea} která obalí {include} a v šabloně použij {snippet} necháš překreslit redrawControl(snippetarea) a redrawControl(snippet)