Использование Hook_form_alter в представленных веб-формой значениях - PullRequest
0 голосов
/ 06 апреля 2011

Drupal 7. Веб-формы 3.x.

Я пытаюсь изменить значение компонента веб-формы при отправке.Я сделал собственный модуль с именем '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) НоЯ думаю, что могу понять эту часть сам.

Ответы [ 2 ]

3 голосов
/ 06 апреля 2011

Сначала вы должны разместить отправку.

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

Однако, если вы хотите изменить некоторые переменные в form_state, вам следует использовать пользовательскую функцию _valadate.

0 голосов
/ 06 апреля 2011

Я понял!БОЛЬШОЕ Спасибо @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.Какая-то странная ситуация ... но мы пытаемся сохранить какой-то существующий код без изменений, поэтому он кажется лучшим маршрутом.

Я случайно испортил создание своей учетной записи, поэтому не могу отдать вам должноеДоберман, но я написал админам по электронной почте, и, надеюсь, я исправлю это, чтобы получить от вас представителя!

...