0

Drupal 7. Webforms 3.x.

送信時にWebフォームコンポーネントの値を変更しようとしています。'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 に答える