Našiel som peknú triedu na odosielanie mailov pomocou PHP a Ajax scriptu, ktorý sa stará o funkčnosť. Už nie je potrebné, aby sa snippet nachádzal na stránke, ktorá nesmie byť ukladaná do cache.
... momentálne je u mňa prvoradý update hlavnej stránky Etomite, tak si na prerobenie snippetu a odskúšanie nájdem čas neskôr.
V krátkosti by to malo vyzerať takto:
- stiahnete si knižnicu PHPMailer (nakonfigurujete príslušný súbor)
- stiahnete si Xajax
- PHP knižnicu a Xajax uploadnete do vašej inštalácie Etomite, tak aby sedela cesta podľa návodu,
- vytvoríte snippet s obsahom:
Kód: Vybrať všetko
require_once('phpmailer/class.phpmailer.php');
require_once('xajax/xajax.inc.php');
$form = '<form id="cform">
<div>
<label for="name">Name</label>
<input name="name" type="text" id="naam" value="" size="25" />
</div>
<div>
<label for="email">E-mail</label>
<input name="email" type="text" id="email" value="" size="25" />
</div>
<div>
<label for="msg">Message</label>
<textarea name="msg" id="msg" cols="45" rows="5"></textarea>
</div>
<div style="border-top:1px solid #CCCCCC;padding-top:5px;">
<label for="subbtn" style="text-align:right;"> --> </label>
<input type="button" id="subbtn" value="Submit" onclick="xajax_myFunction(xajax.getFormValues('cform'));" />
</div>
</form>';
function myFunction($get) {
global $form, $error;
$error = '';
$objResponse = new xajaxResponse();
$show_form = true;
if (!empty($get['email']) && !empty($get['msg']) && !empty($get['name'])) {
if (preg_match("/^[\w-]+(\.[\w-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4})$/i", trim($get['email']))) {
$email = preg_replace("/\r\n/", "", $get['email']);
$from = preg_replace("/\r\n/", "", $get['name']);
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = "smtp.yourserver.com";
$mail->SMTPAuth = true;
$mail->Username = "postmaster@yourserver.com";
$mail->Password = "password";
$mail->From = "postmaster@yourserver.com";
$mail->FromName = "Webmaster";
$mail->AddAddress("admin@yourserver.com");
$mail->AddReplyTo($email, $from);
$mail->Subject = "contact form using Xajax and phpmailer";
$mail->Body = $get['msg'];
if ($mail->Send()) {
$error = "The form is submitted and the mail is send.";
$show_form = false;
} else {
$error = "There was a problem while sending the mail, please try again";
}
} else {
$error = "The entered e-mail address is not valid.";
}
} else {
$error = "At least one of the fields is empty...";
}
$data = (!$show_form) ? '<p class="contactMsg">'.$error.'</p>' : '<p class="contactMsg">'.$error.'</p>'.$form;
$objResponse->addAssign('contact_result', 'innerHTML', $data);
return $objResponse;
}
$xajax->printJavascript('xajax/');
$xajax = new xajax();
$xajax->registerFunction('myFunction');
$xajax->processRequests();
return '<div id="contact_result">'.$form.'</div>';
Nebolo to testované. Ešte tam treba doplniť náhradu za captchu, niečo v zmysle: "Do políčka overovacieho reťazca napíšte pomocou číslis "dvetisíctristošesťdesiatpäť" (bez úvodzoviek) - ochrana proti spamu a overenie".
Ďalší menej premakaný, príklad snippetu môžete nájsť na webe
An AJAX contact form. V balíčku sa nachádza príklad fungovania. Stačí vytvoriť chunk z HTML fragmentu, ktorý sa nachádza v príklade použitia v index.php a ostatné súbory okrem index.php uploadnete do vašej inštalácie Etomite. Nezabudnite nakonfigurovať scripty, ktoré sa nachádzajú v adresári scripts (mail, predmet a pod.)
Do hlavičky templatu (prípadne vložiť do chunku):
Kód: Vybrať všetko
<script type="text/javascript" src="js/functionAddEvent.js"></script>
<script type="text/javascript" src="js/contact.js"></script>
<script type="text/javascript" src="js/xmlHttp.js"></script>
<style type='text/css' media='screen,projection'>
<!--
body { margin:20px auto;width:600px;padding:20px;border:1px solid #ccc;background:#fff;font-family:georgia,times,serif; }
fieldset { border:0;margin:0;padding:0; }
label { display:block; }
input.text,textarea { width:300px;font:12px/12px 'courier new',courier,monospace;color:#333;padding:3px;margin:1px 0;border:1px solid #ccc; }
input.submit { padding:2px 5px;font:bold 12px/12px verdana,arial,sans-serif; }
-->
</style>
{{Chunk}} (nie snippet):
Kód: Vybrať všetko
<h2>AJAX Contact Form</h2>
<p id="loadBar" style="display:none;">
<strong>Sending Email via slick AJAX. Hold on just a sec…</strong>
<img src="img/loading.gif" alt="Loading..." title="Sending Email" />
</p>
<p id="emailSuccess" style="display:none;">
<strong style="color:green;">Success! Your Email has been sent.</strong>
</p>
<div id="contactFormArea">
<form action="scripts/contact.php" method="post" id="cForm">
<fieldset>
<label for="posName">Name:</label>
<input class="text" type="text" size="25" name="posName" id="posName" />
<label for="posEmail">Email:</label>
<input class="text" type="text" size="25" name="posEmail" id="posEmail" />
<label for="posRegard">Regarding:</label>
<input class="text" type="text" size="25" name="posRegard" id="posRegard" />
<label for="posText">Message:</label>
<textarea cols="50" rows="5" name="posText" id="posText"></textarea>
<label for="selfCC">
<input type="checkbox" name="selfCC" id="selfCC" value="send" /> Send CC to self
</label>
<label>
<input class="submit" type="submit" name="sendContactEmail" id="sendContactEmail" value=" Send Email " />
</label>
</fieldset>
</form>
</div>
2
gabo: vyskúšaj to a keby si mal s tým nejaký problém, tak napíš postup ako si nato išiel a pozriem sa nato.