po odeslani formulare se nevykresli flash message

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

Ahoj,

mam formular s live validaci, formular je defaultne skryty v layoutu, zobrazuje se po stisknuti tlacitka v popup okne.

Po odeslani formulare dojde k odeslani emailu, ale nedojde k vykresleni success hlasky a pole formulare se nevyresetuji.


    /**
     *
     * @return UI\Form
     */
    protected function createComponentTrialOrderForm()
    {
        $form = new UI\Form;
        $form->addText('first_name', 'First name:')
              ->setRequired('Please type your first name.');

        $form->addText('last_name', 'Last name:')
            ->setRequired('Please type your last name.');

        $form->addText('email', 'Email:')
            ->addRule(UI\Form::EMAIL, 'The email address is not valid.')
            ->setRequired('Please type your email.');

        $form->addTextArea('message', 'Let us know your special requirements:');

        $form->addSubmit('send', '');
        $form->addProtection('Submission timed out. Please try again.');
        $form->onSuccess[] = array($this, 'trialOrderFormSucceeded');

        return $form;
    }

    /**
     *
     * @param UI\Form $form
     * @param $values
     */
    public function trialOrderFormSucceeded(UI\Form $form, $values)
    {

        $userIp = $this->getHttpRequest()->getRemoteAddress();
        $country = geoip_country_name_by_name($userIp);
        $email = $values->email;

        $message = new Nette\Mail\Message();
        $message->setFrom($email, $values->last_name . ' ' . $values->first_name)
            ->addTo('******')
            ->setSubject('trial request')
            ->setBody($values->message . "\n\nIP odesilatele: " . $userIp . "\nGEO: " . $country);

        $mailer = new SendmailMailer();

        try {
            $mailer->send($message);
        } catch (Nette\InvalidStateException $e) {
            $form->addError('There was a problem sending message. Please repeat your action later.');
            return;
        }


        $this->flashMessage(self::TRIAL_ORDER_SENT_SUCCESS, 'success');

        if (!$this->isAjax()) {
            $this->redirect('this');
        } else {
            $form->setValues(array(), TRUE);
            $this->redrawControl('formTrial');
        }
    }
			<div id="div-trial-order-form" style="display:none">
                 {snippet formTrial}
                    {var $formClass = 'form-std'}
                    {foreach $flashes as $flash}
                          {if $flash->message === App\Presenters\PricingPresenter::TRIAL_ORDER_SENT_SUCCESS}
                              {var $formClass .= ' is-sent'}
                          {/if}
                    {/foreach}
                    {form trialOrderForm class => $formClass . '  trial-order-form ajax form-std' }
                        <fieldset>
                            <p class="inp-wrap grid-2t">
                                {label first_name /} {input first_name } <br/>
                            </p>
                            <p class="inp-wrap grid-2t">
                                {label last_name /} {input last_name} <br/>
                            </p>
                            <p class="inp-wrap grid-2t">
                                {label email /}  {input email} <br/>
                            </p>
                            <p>
                                {label message /}
                                <br/>
                                {input message, cols => 50, rows => 1}
                            </p>
                            <p class="reset">
                                <button type="submit" class="btn btn-m">
                                    <span>Send message</span>
                                </button>
                            </p>
                        </fieldset>
                        {snippet flashesTrial}
                            {foreach $flashes as $flash}
                                <br/><div style="font-size:110%" class="inner-success flash {$flash->type}">{$flash->message}</div>

                            {/foreach}
                        {/snippet}
                    {/form}
                {/snippet}
			</div>

pouzivam plugin Live Form Validation for Nette 2.2 a AJAX Nette Framework plugin for jQuery

Live validace vsak funguje, pri neplatnych hodnotach, se objevi prislusne hlasky u chybneho pole.

Nevite nekdo, v cem je chyba ?

Lukeluha
Člen | 130
+
0
-

Hodnoty formuláře nenastavuj jako $form->setValues, ale $this['trialOrderForm']->setValues(). S flash message nějak nevím. Možná bych je vyhodit z bloku {form} Bez JS se ti objeví? Popř se podívej do konzole, jestli se Ajaxový HTTP požadavek provedl úspěšně.

EDIT: spíš to bude tím, že nepoužíváš submit input, který si definuješ v továrničce

Editoval Lukeluha (28. 5. 2015 20:19)

Mira8
Člen | 36
+
0
-

ahoj, bohuzel nepomohla mi zadna z nabizenych moznosti

Mira8
Člen | 36
+
0
-

tak nakonec je problem ve vkladani formulare v layoutu pres komponentu

{includeblock 'components/trialPopup.latte'}

pokud tam je formular natvrdo funguje spravne