簡體   English   中英

在Webform提交的值上使用Hook_form_alter

[英]Using Hook_form_alter on webform submitted values

Drupal 7. 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),但是我想我可以自己弄清楚這部分。

您應該首先提交。

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

但是,如果要更改form_state中的某些變量,則應使用自定義_valadate函數。

我知道了! BIG感謝@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,但我通過電子郵件發送給管理員,希望我能弄清楚它,以便給您帶來一些幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM