• eForm のユーザ定義イベントを使ってみる#

  • dainiti Reply #1, 3 years, 3 months ago

    Reply
    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>ï¼ï¼ï¼ãã©ã¼ã ããã¼ã¹ãããç´åã«å¼ã³åºããã¾ãããã©ã¼ã ããPOSTããã妥å½ãªãã¼ã¿ ($_POST) ãããå ´åã«ã®ã¿ããã¼ã¹ãè¡ããã¾ãã</p>';
    	return true;
    }
    
    function onValidate(&$fields,&$vMsg,&$rMsg) {
    	echo '<p>ï¼ï¼ï¼ãã«ãã¤ã³ã®ããªãã¼ã·ã§ã³ããã¼ã¹ãããå¾ã«å¼ã³åºããã¾ããããªãã¼ã·ã§ã³ã®æ¡å¼µã«ä½¿ãã¾ãã</p>';
    	return true;
    }
    
    function onBeforeMailSent( &$fields ) {
    	echo '<p>ï¼ï¼ï¼ã¡ãã»ã¼ã¸ãéä¿¡ãããåã«å¼ã³åºããã¾ãããã®ã¤ãã³ãã¯&noemailã設å®ããã¦ãããã©ããã«é¢ãããå¼ã³åºããã¾ãã <br />';
    	echo 'ãããæ¨æºã®ãã©ã¼ã ãã§ãã¯ã§ã§ããªããã§ãã¯ãæ¡å¼µã§ãã¾ãã </p>';
    	if ($fields['email'] == $fields['verify_email']) return true;
    	$fields['validationmessage']='確èªç¨ã¡ã¼ã«ã¢ãã¬ã¹ã«ç¸éãããã¾ãã確èªãã¦ãã ãã';
    	return false;
    }
    
    function onBeforeFormMerge( &$fields ) {
    	echo '<p>ï¼ï¼ï¼ãã©ã¼ã ãã¯ã©ã¤ã¢ã³ããã©ã¦ã¶ã«åºåãããåã«å¼ã³åºããããæå¾ã®ã¤ãã³ãã§ãã <br />';
    	echo 'ãããã¦ã§ãã¦ã¼ã¶ãã¾ãã¯ããã¼ã¸ã£ã¨ãã¦ã­ã°ã¤ã³ãã¦ããå ´åã«ååã¨ã¡ã¼ã«ã¢ãã¬ã¹ã設å®ããä¾ã§ãã</p>';
    	$info=userInfo();
    	$fields['name']=$info['fullname'];
    	$fields['email']=$info['email'];
    	return $fields;
    }
    
    function onMailSent( &$fields ) {
    	echo '<p>ï¼ï¼ï¼ã¡ãã»ã¼ã¸ãéä¿¡ããå¾ã«å¼ã³åºããã¾ãã&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


  • dainiti Reply #2, 3 years, 3 months ago

    Reply
    スニペットとして eForm のイベント関数を保存する方法は ZeRo さんからお聞きした方法です。
    http://modxcms.com/forums/index.php/topic,33211.msg202212.html#msg202212

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