Po odeslání kontaktního formuláře, který je zobrazen pomocí JS se neukáže flashMessage
- diablos
- Člen | 36
Zdravím,
mám problém se zobrazení flashMessage při validaci kontaktního formuláře, který se zobrazí pomocí JS, po kliku na ikonu „napište nám“. Když napíšu špatně e-mail, tak to sice správně validace formulář stopne, ale nevypíše flashMessage. Formulář mám jako komponentu.
<?php
class ContactControl extends BaseControl {
protected function createComponentContactForm($name) {
$form = new Form($this, $name);
$form->addText('name', NULL)
->setAttribute('placeholder', 'Jméno')
->setRequired("Zadejte prosím jméno");
$form->addText('mail', NULL)
->setAttribute('placeholder', 'E-mail')
->addRule(Form::EMAIL, 'Zadejte prosím platný e-mail.')
->setRequired("Zadejte prosím e-mail");
$form->addTextarea('comment', NULL)
->setAttribute('placeholder', 'Zpráva...')
->setRequired("Zadejte prosím popis.");
$form->addButton('close', 'Zavřít');
$form->addSubmit('submit', 'Odeslat');
$form->onSuccess[] = callback($this, 'commentSubmited');
return $form;
}
public function render() {
$template = $this->template;
$template->setFile(__DIR__ . '/ContactControl.latte');
$template->form = $this->getComponent('contactForm');
$template->render();
}
public function commentSubmited(Form $form) {
$data = $form->getValues();
$this->sendEmail($data->name, $data->mail, $data->comment);
$this->getPresenter()->flashMessage('Váš e-mail byl odeslán. Děkujeme za Váš zájem.', 'success');
$this->getPresenter()->redirect('this');
}
}
?>
Díky za nápady.
- nanuqcz
- Člen | 822
Ahoj, nepoužíváš náhodou v šabloně ruční vykreslování formulářů? Jestli jo, nechybí ti tam něco jako
<ul class="errors" n:if="$form->hasErrors()">
<li n:foreach="$form->errors as $error">{$error}</li>
</ul>
- diablos
- Člen | 36
V šabloně používám:
<?php
{if ($flashes)}
{if ($flashes[0]->type == "error")}<div class="message message-error">{/if}
{if ($flashes[0]->type == "success")}<div class="message message-success">{/if}
<p>
{foreach $flashes as $flash}
{$flash->message}
{/foreach}
</p>
</div>
{/if}
?>
V tomhle problém nebude, protože je ten formulář v presenteru s loginem a ten vyhazuje vyjímky v pohodě. Tuším, že to bude nějaký problém s JS…
- nanuqcz
- Člen | 822
Tohle
$form->addText('mail', NULL)
->addRule(Form::EMAIL, 'Zadejte prosím platný e-mail.')
->setRequired("Zadejte prosím e-mail");
ale nejsou flashMessages. To jsou chyby formuláře, které s flashMessages nemají nic společného a vypisují se jinde (standardně přímo nad formulářem, pokud nepoužíváš manuální vykreslování formulářů a nevložíš si je jinde).
- Tomáš Votruba
- Moderator | 1114
@diablos: Jak píše nanuqcz, pes bude zakopaný v šabloně, takže sem hoď tu.
OT: Ad flashMessage, díky n:makrům je lze vypisovat elegantněji (při změně trochu css; přeci jen je lepší se řídit třídou dané zprávy, jelikož můžeš mít několik zpráv různých typů):
<div n:if="$flashes">
{foreach $flashes as $flash}
<p n:class="message, $flash->type">{$flash->message}</p>
{/foreach}
</div>
<!-- nebo dokonce takto (doporučuji) -->
<div n:inner-foreach="$flashes as $flash">
<p n:class="message, $flash->type">{$flash->message}</p>
</div>
<!-- není nutné, ale také možné, viz https://componette.org/search/?q=flashmessagecontrol#toc-how-to-use -->
{control flashMessage "p" "div"}
Editoval Schmutzka (27. 3. 2012 21:54)
- Tomáš Votruba
- Moderator | 1114
gmvasek napsal(a):
Poznámka: v n:class se nepíšou složené závorky :)
Jinak nějaká disfunkčnost?
- Tomáš Votruba
- Moderator | 1114
gmvasek napsal(a):
@Schmutzka: ne, jen mě to překvapilo, protože to vidím poprvé… taky jsem to netestoval, takže je dost možné, že to bere obě varianty.
Jo, promiň, blbě jsem tě pochopil :D jasné. Nedošlo mi, že když píšeš závorky, nemyslíš tím uvozovky ;).
Fixed, upsal jsem se.
Editoval Schmutzka (27. 3. 2012 21:55)