我正在使用自定义模块拦截表单提交,然后cURL将数据提交给第三方网站(在这种情况下是Pardot ......但我在其他CRM中也得到了相同的结果,如Marketo)。
这一切都有效并且数据已正确提交,但Drupal正在提交两次。我在Drupal之外尝试了相同的cURL函数,它只发送一次,所以在Drupal中有一些事情导致这个函数运行两次我想。
任何人都知道为什么会这样?谢谢!
更新:所以我做了一些特殊的测试,表格的数量无关紧要,或指定一个表格...它总是提交两次。
function hook_form_alter(&$form, &$form_state, $form_id) {
if (strstr($form['#form_id'], 'webform_client_form_')) {
array_unshift($form['#submit'], 'hook_pardot_submit');
}
}
/**
* Send post data to pardot via curl
*/
function hook_pardot_submit($form, &$form_state) {
// Values sent from form
$values = $form_state['values']['submitted'];
if ( ! function_exists('curl_init')) {
error("Curl is not setup on this PHP server and is required for this script.");
}
//Open cURL connection
$ch = curl_init();
if (curl_error($ch) != "") {
die("Error: $error");
}
// Submit data to pardot
curl_setopt($ch, CURLOPT_URL, "http://mypardoturl.com");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($values,'', '&'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
//Execute pardot PHP cURL
$result = curl_exec($ch);
//close cURL connection
curl_close($ch);
}
答案 0 :(得分:1)
因此,经过更多的调试,结果是Drupal form_alter函数(调用上面的提交函数)被调用两次,从而导致Pardot获得两次提交。
之所以发生这种情况,是因为主题名称与此自定义模块名称相同。卸载模块后,将模块文件夹,.info和.module名称更改为与主题名称不同,它只调用form_alter函数一次。
答案 1 :(得分:0)
您在网站上有多个网络表单吗?也许2?
因为目前函数hook_form_alter
运行的if语句使用'strstr'。您应该在if语句中更具体,并使用带有相等运算符(“==”)的webform的表单ID。