We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 6350
    • 421 Posts
    eForm のイベントを使った使用例が見当たらないため備忘録としてここに保存しておきたいと思います。
    [[eFormEvent]] ← eForm の呼び出し前にユーザ定義関数のスニペット名を指定する
    [!eForm? &formid=`ContactForm` &subject=`[+subject+]` &to=`[(emailsender)]` &ccsender=`1` &tpl=`ContactForm` &report=`ContactFormReport` &invalidClass=`invalidValue` &requiredClass=`requiredValue` &cssStyle=`ContactStyles` &gotoid=`46` &eFormOnBeforeFormMerge=`onBeforeFormMerge` &eFormOnBeforeFormParse=`onBeforeFormParse` &eFormOnBeforeMailSent=`onBeforeMailSent` &eFormOnMailSent=`onMailSent` &eFormOnValidate=`onValidate` !]

    イベント呼出用関数をスニペット名 [b]eFormEvent として保存した場合の内容例[/b]
    コード中に、<?php ~ ?> を含むと全角文字がデコードされてしまうためここでは割愛しています。
    function onBeforeFormParse (&$fields,&$templates) {
    	echo '<p>(1)フォームがパースされる直前に呼び出されます。フォームからPOSTされた妥当なデータ ($_POST) がある場合にのみ、パースが行われます。</p>';
    	return true;
    }
    
    function onValidate(&$fields,&$vMsg,&$rMsg) {
    	echo '<p>(2)ビルトインのバリデーションがパースされた後に呼び出されます。バリデーションの拡張に使います。</p>';
    	return true;
    }
    
    function onBeforeMailSent( &$fields ) {
    	echo '<p>(3)メッセージが送信される前に呼び出されます。このイベントは&noemailが設定されているかどうかに関わらず呼び出されます。 <br />';
    	echo '   標準のフォームチェックでできないチェックを拡張できます。 </p>';
    	if ($fields['email'] == $fields['verify_email']) return true;
    	$fields['validationmessage']='確認用メールアドレスに相違があります。確認してください';
    	return false;
    }
    
    function onBeforeFormMerge( &$fields ) {
    	echo '<p>(4)フォームがクライアントブラウザに出力される前に呼び出される、最後のイベントです。 <br />';
    	echo '   ウェブユーザ、またはマネージャとしてログインしている場合に名前とメールアドレスを設定する例です。</p>';
    	$info=userInfo();
    	$fields['name']=$info['fullname'];
    	$fields['email']=$info['email'];
    	return $fields;
    }
    
    function onMailSent( &$fields ) {
    	echo '<p>(5)メッセージを送信した後に呼び出されます。&toが設定されていない場合、またはメールアドレスが正しくない場合、このイベントは呼び出されません。 </p>';
    }
    
    function userInfo() {
    	global $modx;
    	if (isset ($_SESSION['webValidated'])) {		// web user
    		return $modx->getWebUserInfo($_SESSION['webInternalKey']);
    	} else
    	if (isset ($_SESSION['mgrValidated'])) {		// manager user
    		return $modx->getUserInfo($_SESSION['mgrInternalKey']);
    	} else {
    		return false;
    	}
    }
    (3)と(4)の呼び出される順番が逆だったので入れ替えました。 2009/02/23
      • 6350
      • 421 Posts
      スニペットとして eForm のイベント関数を保存する方法は ZeRo さんからお聞きした方法です。
      http://modxcms.com/forums/index.php/topic,33211.msg202212.html#msg202212

      詳しくは ZeRo さんへ質問してください。 laugh