po odeslani formulare se nevykresli flash message
- Mira8
- Člen | 36
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
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)