Po odeslání kontaktního formuláře, který je zobrazen pomocí JS se neukáže flashMessage

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

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

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

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

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

@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)

Aurielle
Člen | 1281
+
0
-

Poznámka: v n:class se nepíšou složené závorky :)

diablos
Člen | 36
+
0
-

Díky pánové za rady, mrknul jsem na to a jednoduše jsem to vyřešil validací mailu přes PHP v submitu…

Editoval diablos (25. 3. 2012 11:17)

Tomáš Votruba
Moderator | 1114
+
0
-

gmvasek napsal(a):

Poznámka: v n:class se nepíšou složené závorky :)

Jinak nějaká disfunkčnost?

Aurielle
Člen | 1281
+
0
-

@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.

Tomáš Votruba
Moderator | 1114
+
0
-

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)