Drupal7.WebForms3.x。
我正在尝试修改提交时的webform组件值。我制作了一个名为'mos‘的自定义模块,并将此代码添加到其中。
function mos_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'webform_client_form_43') {
dsm($form['#node']->{'webform'}['components']['1']);
$form['#submit'][] = 'mos_contact_us_submit';
}
}
function mos_contact_us_submit($form, &$form_state) {
$form['#node']->{'webform'}['components']['1'] = 'working@mos.com';
}但是,当我查看数据库中的结果时,会存储常规的、未覆盖的值。你能告诉我我做错了什么吗?
最终,我希望获得输入值并根据提供的内容输出电子邮件地址(例如。24转成bob@somewhere.com),但我想我可以自己弄明白这一部分。
发布于 2011-04-06 12:19:03
你应该把提交放在第一位。
array_unshift(
$form['actions']['submit']['#submit'],
'mos_contact_us_submit'
);但是,如果你想改变form_state中的一些变量,你应该使用自定义的_valadate函数。
发布于 2011-04-07 03:36:29
这样啊,原来是这么回事!非常感谢@dobeerman为我指明了正确的方向。以下是最终正常运行的代码:
function mos_form_alter(&$form, &$form_state, $form_id) {
if ('webform_client_form_43' == $form_id) {
//dsm($form);
$form['#validate'][] = 'mos_check_email';
}
}
function mos_check_email(&$form, &$form_state, $form_id) {
$emailVal = $form_state['values']['submitted']['to'];
switch($emailVal) {
case 1: $emailVal = 'email@test.com'; break;
case 2: $emailVal = 'email2@test.com'; break;
case 3: $emailVal = 'email3@test.com'; break;
......
}
$form_state['values']['submitted']['to']=$emailVal;
//dpm($form_state);
}通过这种方式,我可以保持电子邮件地址的私密性,但仍然可以使用_GET将变量传递给表单。有点奇怪的情况..。但我们正在努力保持一些现有代码的完整性,所以这似乎是最好的方法。
我不小心搞乱了我的帐户创建,所以我不能给你信用dobeerman,但我给管理员发了电子邮件,希望我能把它弄清楚,让你得到一些代表!
https://stackoverflow.com/questions/5560133
复制相似问题