Občas potřebuji udělat jen drbku na webu, který na NETTE neběží a pak nastane otázka, zda to dělat ještě v pure PHP a nebo nějak do toho komponovat NETTE. U mě je odpověď jasná. NETTE!
Zadání:
Přidat na stávající web formulář pro odeslání mailů.
Řešení:
Kdekoliv je libo (někdo plácá HTML s PHP, někdo typy obsahu dělí mezi šablonu a další soubory, …) si vygenerujeme formulář s plnou podporou NETTE.
include_once $_SERVER['DOCUMENT_ROOT'] . '/_libs/nette.min.php'; use Nette\Mail\Message, Nette\Forms\Form; // vytvoření formuláře $form = new Form; $form->addText('jmeno', 'Jméno a příjmení *:') ->setRequired('Zadejte prosím jméno'); $form->addText('mail', 'E-mail:'); $form->addText('tel', 'Telefon:') ->addConditionOn($form['mail'], Form::EQUAL, '') ->addRule(Form::FILLED, 'Zadejte prosím alespoň jeden z kontaktů'); $form['mail']->addConditionOn($form['tel'], Form::EQUAL, '') ->addRule(Form::FILLED, 'Zadejte prosím alespoň jeden z kontaktů') ->addRule(Form::EMAIL, 'E-mail nemá správný formát'); $form->addSelect('zajem', 'Mám zájem o:', array('sádrokartony, rekonstrukce' => 'sádrokartony, rekonstrukce', 'malby, nátěry' => 'malby, nátěry', 'ostatní' => 'ostatní')); $form->addTextArea('pozn', 'Poznámka:', 40, 4); // antispam // podrobněji toto řešení rozebírám v jiném článku $c1 = date('j')+3; $c2 = date('N')+2; $s = $c1 + $c2; $form->addText('soucet', sprintf('Zadejte součet %s+%s *:', $c1, $c2)) ->setRequired('Je třeba zadat součet jako ochranu proti SPAMu') ->addRule(Form::EQUAL, 'Je třeba zadat součet jako ochranu proti SPAMu', $s); $form->addHidden('c1', $c1); $form->addHidden('c2', $c2); $form->addSubmit('send', 'Odeslat'); |
Pak kdekoliv chci formulář zobrazit tak napíši jen:
echo $form; |
Pro JS validaci (není nutná) stačí nahrát a nalinkovat soubor netteForm.js:
<script type="text/javascript" src="../_js/netteForms.js"></script> <script type="text/javascript"> // řešení pro antispam popisuji jinde document.getElementById("frm-soucet").value = parseInt(document.getElementById("frm-c1").value) + parseInt(document.getElementById("frm-c2").value); document.getElementById("frm-soucet").parentNode.parentNode.style.display = "none"; </script> |
Zpracování formuláře a odeslání ho na mail jde stejně jednoduše:
if ($form->isSuccess()) { $val = $form->getValues(); $mail = new Message; $from = ($val['mail'] == '') ? 'Z webu <web @nejaky-web.cz>' : $val['jmeno'] . ' < ' . $val['mail'] . '>'; $mail->setFrom($from) ->addTo('Info <info @nejaky-web.cz>') ->setSubject('Poptávka z webu') ->setBody(sprintf("Dobrý den,\nJméno: %s\nE-mail: %s\nTelefon: %s\nZájem o: %s\nPoznámka:\n%s", $val['jmeno'], $val['mail'], $val['tel'], $val['zajem'], $val['pozn'])) ->send(); }</info></web> |
Jak dlouho byste toto dělali v čistém PHP?