0

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)但我想我可以自己弄清楚这部分。

4

2 回答 2

3

您应该先提交。

array_unshift(
      $form['actions']['submit']['#submit'], 
      'mos_contact_us_submit'
);

但是,如果要更改 form_state 中的某些变量,则应使用自定义 _valadate 函数。

于 2011-04-06T04:19:03.280 回答
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 将变量传递给表单。有点奇怪的情况......但我们正试图保持一些现有代码完整,所以这似乎是最好的路线。

我不小心弄乱了我的帐户创建,所以我不能给你杜比曼的功劳,但我给管理员发了电子邮件,希望我能把它理顺,让你得到一些代表!

于 2011-04-06T19:36:29.330 回答