User Tools

Site Tools


Sidebar

code:modx:eform

MODx eForm

Rozšíření validace formuláře

  • pomocí paramentru &eformOnValidate
  • nejprve je třeba incializovat Snippet například pomocí [!eFormEvent!], aby jsme z něj následně mohli volat funkci
[!eFormEvent!]
[!eForm? &formid=`form` ... &eformOnValidate=`eFormOnValidate` !]
  • ukázka kódu snippetu nazvaného eFormEvent, z tohoto snipetu se následně spustí funkce podle názvu v parametru &eformOnValidate (v našem případe “eFormOnValidate”), proměnné dostane automaticky, POZOR proměnné nutno přebírat jako ukazatele
<?php
function eFormOnValidate( &$fields, &$vMsg, &$rMsg ){
		if($fields['email'] !== $fields['myconfirmemailaddress']) {
		    $rMsg[] = 'email'; // Required field
		    $vMsg[] = "Different values in Email and Confirm Email fields"; // Associated validation message
		}
		return;
	}
?>

Odeslání dalšího emailu

  • pro tuto situaci jsou zde dvě události &eFormOnBeforeMailSent a &eFormOnMailSent
  • zapsání v eFormu:
[[eFormEvent]]
[!eForm? &formid=`ContactForm` ... &eformOnBeforeMailSent=`ContactFormReportToUser` !]
  • Snippet:
<?php
// odeslani emailu navic
function ContactFormReportToUser(&$fields) {
    require_once "manager/includes/controls/class.phpmailer.php";
 
    $from = ''; // email od
    $fromname = ''; // jmeno od
    $subject = $fields['subject']; // predmet emailu
    $replyto = $from; // kam se bude odpovidat
    $address = $fields['email']; // kam posilame
 
$message = '<p>Zpráva odeslaná z kontaktního formuláře:</p>
 
<p>Předmět: '.$fields['subject'].'</p>
<p>Email: '.$fields['email'].'</p>
 
<p>Obsah zprávy:<br />'.$fields['message'].'</p>';
 
    # send abuse alert
    $mail = new PHPMailer();                       
    $mail->IsMail();                               
    $mail->CharSet = 'utf8';
    $mail->IsHTML(true);                        
    $mail->From	 = $from;                       
    $mail->FromName = $fromname;                   
    $mail->Subject = $subject;                 
    $mail->Body = $message;
 
    $mail->AddReplyTo($replyto);
    $mail->AddAddress($address);
 
    if(!$mail->send()) return $mail->ErrorInfo;
 
    return True; // pry se ma vratit true :)
}
 
//return empty string
return '';
?>

eForm JavaScript antispam

Snippet: antiSpamCheck

<?php
//check if service field is filled by JS and has appropriate value, format: SF2010-5-1 (year-month-day without leading zeros)
    function checkField(&$fields){
        if($fields['serviceField'] <> 'SF'.date('Y-n-j')){
            print('No spam!');
            exit;
        }
    }
?>

Javascript:

$(document).ready(function() {
    // fill out antispam secure input format: SF2010-5-1 (year-month-day without leading zeros)
    var curDate = new Date();
    var month = curDate.getMonth() + 1;
    $('#serviceField').val('SF' + curDate.getFullYear() + '-' + month + '-' + curDate.getDate());   
});

Rozšířit šablonu (chunk) formuláře o:

<input name="serviceField" id="serviceField" type="text" style="display: none;" />

Volání eForm rozšířit o:

[!antiSpamCheck? !]
[!eForm? ... &eformOnBeforeMailSent=`checkField` !] 
code/modx/eform.txt · Last modified: 2013/03/26 20:10 (external edit)