[英]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.