Vytváříme kontaktní formulář
Tato stránka je již zastaralá a návod nemusí být funkční.
Vytvoření kontaktního formuláře s odesláním na mail – formou raw textu i html šablonou.
Návod staví nad sandboxem Nette 2.0.8 a PHP 5.3+. Stačí jej stáhnout a upravovat konkrétní soubory.
Jednoduše v presenteru
Nejjednodušší a nejrychlejší přístup je vytvoření formuláře v presenteru – vytvoříme tedy komponentu
ContactForm
. Dále přidáme její zpracování třídou Nette\Mail\Message, která má na starosti vytváření a
odesílání emailů. Více o odesílání emailů si můžete přečíst v dokumentaci.
presenters/HomepagePresenter.php
use Nette\Application\UI\Form;
use Nette\Mail\Message;
class HomepagePresenter extends BasePresenter
{
/**
* Contact form
*/
protected function createComponentContactForm()
{
$form = new Form;
$form->addText('name', 'Jméno:')
->addRule(Form::FILLED, 'Zadejte jméno');
$form->addText('email', 'Email:')
->addRule(Form::FILLED, 'Zadejte email')
->addRule(Form::EMAIL, 'Email nemá správný formát');
$form->addTextarea('message', 'Zpráva:')
->addRule(Form::FILLED, 'Zadejte zprávu');
$form->addSubmit('send', 'Odeslat');
$form->onSuccess[] = [$this, 'processContactForm'];
return $form;
}
/**
* Process contact form, send message
* @param Form
*/
public function processContactForm(Form $form)
{
$values = $form->getValues(true);
$message = new Message;
$message->addTo('test@gmail.com')
->setFrom($values['email'])
->setSubject('Zpráva z kontaktního formuláře')
->setBody($values['message'])
->send();
$this->flashMessage('Zpráva byla odeslána');
$this->redirect('this');
}
}
Takto vytvořenou komponentu poté stačí přidat do šablony a můžeme vesele kontaktovat.
templates/Homepage/default.latte
{block content}
{control contactForm}
HTML šablona emailu
Pokud chceme v emailu využít HTML, musíme použít vlastní šablonu. V ní definujeme proměnné (ty jí musíme předat)
a předmět v tagu <title>
. Šablonu umístíme např. do:
templates/email/emailTemplate.latte
<html>
<head>
<title>{$title}</title>
</head>
<body>
<ul>
<li>
<strong>Jméno:</strong> {$values['name']}
</li>
<li>
<strong>Email:</strong> {$values['email']}
</li>
<li>
<strong>Zpráva:</strong> {$values['message']}
</li>
</ul>
</body>
</html>
Ještě upravíme metodu pro zpracování formuláře.
presenters/HomepagePresenter.php
/**
* Process contact form, send message with custom template
* @param Form
*/
public function processContactForm(Form $form)
{
$values = $form->getValues(true);
$message = new Message;
$message->addTo('test@gmail.com')
->setFrom($values['email']);
$template = $this->createTemplate();
$template->setFile(__DIR__ . '/../templates/emails/emailTemplate.latte');
$template->title = 'Zpráva z kontaktního formuláře';
$template->values = $values;
$message->setHtmlBody($template)
->send();
$this->flashMessage('Zpráva byla odeslána');
$this->redirect('this');
}