Drupal 7. Webforms 3.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)但我想我可以自己解决这个问题。
答案 0 :(得分:3)
您应该先提交提交。
array_unshift(
$form['actions']['submit']['#submit'],
'mos_contact_us_submit'
);
但是,如果要更改form_state中的某些变量,则应使用自定义_valadate函数。
答案 1 :(得分:0)
我明白了!感谢@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但是我给管理员发了电子邮件,希望我能把它弄清楚,让你得到一些代表!