MailformControl – komponenta pro rychlé vytváření e-mailových formulářů

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

Ahoj,
divím se, že už tu podobná komponenta není, tak dávám k dispozici svojí.

Github: MailformControl

Základní použití

protected function createComponentMailform()
{
    $mailform = new MailformControl();
    return $mailform;  // automaticky vytvoří základní inputy (Jméno, E-mail, Zpráva, Odeslat), nastaví hlavičky e-mailů (from, to, subject) podle URL webu
}

Nastavení

// Hlavičky e-mailu
$mailform->setFrom('noreply@example.com');                       // adresa odesilatele
$mailform->addTo('michal@example.com', 'Michal Mikoláš');        // adresa příjemce
$mailform->setSubject('Na tvojí stránce byl vyplněn kontakt!');  // předmět mailu

// Začátek e-mailu
$mailform->setBodyHeader('Na vašem webu byl vyplněn formulář s následujícími údaji');

// Konec e-mailu
$mailform->setBodyFooter('<hr><p align="right">vygenerováno systémem Xyz s.r.o</p>');

// Cesta k šabloně
$mailform->setTemplate(__DIR__ . '/mailform-contact.latte');

Vlastní formulář

$form = new Form();
$form->addText('accountNumber', 'Číslo vašeho bankovního účtu: ')
    ->addRule(Form::FILLED, 'Vyplň to číslo!');
$form->addSubmit('send', 'Pošli');

$mailform->setForm($form);

// Nebo

$mailform->form->addText('accountNumber', 'Číslo vašeho bankovního účtu: ')
    ->addRule(Form::FILLED, 'Vyplň to číslo!');
$mailform->form->addSubmit('send', 'Pošli');

Editoval xxxObiWan (27. 8. 2011 23:07)

22
Člen | 1478
+
0
-

K čemu je to dobré? O tom, co udělám s datama z formuláře se rozhoduju až ve zpracování formu… nějak nevím, co mi to má ulehčit??

nanuqcz
Člen | 822
+
0
-

No, minimálně se nemusíš starat o $form->onSuccess metodu, tahle komponenta si sama vytáhne data z formuláře a vytvoří a odešle jejich hodnoty e-mailem. Navíc většina mailformů, co jsem kdy dělal, měla opravdu jen inputy „Jméno:“, „E-mail:“, „Zpráva:“ a tlačítko pro odeslání, což je s MailformControl hračka na dva řádky.

Mě to určitě práci ulehčí, tak předpokládám že i dalším ;-)

22
Člen | 1478
+
0
-

Nevím, osobně mě tyhle maily taky otravujou a už se na to chystám asi rok :-), napsat si nějaký helper, ale určitě bych to řešil nějakou třidou, kterou si instancuju až v submit metodě, kam pošlu jen v pole s e-maily, obsah mailu, subject, případně HTML šablonu. Takže mi to zabere pár řádků v submit metodě.

...
$mail = new MailBuilder();
$mail->build(array(
	'from' => $formData->email,
	'to' => 'aaa@mail.com',
	...
));
$mail->send();
...

edit: respektive tu funkčnost tvoji bych udělal, jako nějaký mod → simpleMail a poslal tam celý $form->values, ať si to roztřídí sám, když se dodrží názvy polí ve formu..
tak by to bylo jen:

$mail = new MailBuilder($formData, 'simpleMail');
$mail->send();

Editoval 22 (28. 8. 2011 1:11)

nanuqcz
Člen | 822
+
0
-

Já jsem chtěl mít něco, čemu řeknu „Mám tenhle formulář, vykresli ho a po odeslání pošli na tento e-mail“. Ty na to jdeš zase z druhé strany ;-)

Editoval xxxObiWan (28. 8. 2011 1:10)

22
Člen | 1478
+
0
-

já ti rozumím, ale já mám většinou teda buď jen form, který pošle mail někam na podporu/poptávku/klasický mail kontak + confirm tomu, kdo mail posílá a tam si se 3 pevně danýma položkama určitě nevyjdu, vždy tam je nějaký identifikátor, selctboxy, checkboxy a já nevím co a ve druhé polovině případů se krom zaslání mailu s těma datama dál pracuje. Takže jo, ale je to moc jednoúčelové podle mě.

Editoval 22 (28. 8. 2011 1:23)