Проверка веб-форм Drupal (webform_form_alter)

Я выполняю некоторую проверку веб-формы с помощью webform_form_alter. Я использую webform_form_alter, потому что переключаю определенный контент в поле «выбрать».

В моем webform-form-317.tpl.php я определил новые наборы полей. Я установил свои поля в этот новый набор полей и удалил оригинал из веб-формы.

$form['submitted']['ContactInfo'] = array(
'#type' => 'fieldset',
'#prefix' => '<div id="ContactInfo">',
'#suffix' => '</div>',
'#weight' => -10,
'#title' => 'Contact Information'
);

$form['submitted']['ContactInfo']['phone_home'] = $form['submitted']['phone_home'];
unset($form['submitted']['phone_home']);

в моем webform_form_alter у меня есть следующий код:

switch ($form_id)
{
case 'webform_client_form_317':
{
$form['#validate'][] = 'validate_form';
}
}

Моя функция Validate_form выглядит так:

function validate_form($form_id, $form_values)
{
      if ($form_values['submitted_tree']['ContactInfo']['phone_home'] == "")
      {
             form_set_error('phone_error', t('Please enter a home phone number.'));
      }
}

Проблема в том, что $ form_values ​​['submit_tree'] ['ContactInfo'] ['phone_home'] возвращается, поскольку ничего, даже если пользователь ввел что-то в текстовое поле.

Есть предложения о том, что я делаю не так?

В качестве второго вопроса на случай, если кто-то также ответит, как мне изменить эти текстовые поля, чтобы установить класс для «ошибки, связанной с текстом формы», чтобы они отображались красным цветом вместе с остальными обязательными полями.

Спасибо


person John Ruppet    schedule 29.09.2010    source источник


Ответы (1)


Я надеюсь, что вы не пишете этот код в модуле веб-формы, а сделали для него свой собственный модуль.

В первом случае ваша функция должна быть

function validate_form($form, &$form_state) {
    if ($form_state['values']['submitted_tree']['ContactInfo']['phone_home'] == "") {
         form_set_error('phone_home', t('Please enter a home phone number.'));
    }
}

Если вы говорите о классе ошибки, Drupal добавляет его во все поля, в которых установлена ​​ошибка, как это сделано в приведенном выше коде. Вам необходимо передать имя поля формы в качестве первого параметра функции form_set_error.

person googletorp    schedule 29.09.2010
comment
Привет, гуглторп. Это, к сожалению, по-прежнему не дает мне значения из 'phone_home', даже если в поле есть текст (или нет), я всегда получаю ошибку Пожалуйста, введите номер домашнего телефона (другими словами $ form_state [... ] всегда (или ноль)). Если я для развлечения сделаю drupal_set_message для этого значения и ничего не получу. - person John Ruppet; 30.09.2010
comment
Получил, используя ваш ответ здесь stackoverflow.com/questions/1464056/ спасибо! - person John Ruppet; 30.09.2010