0

webform_form_alterを使用してWebフォームの検証を行っています。「選択」フィールドで特定のコンテンツを切り替えるため、webform_form_alterを使用しています。

webform-form-317.tpl.phpで、新しいフィールドセットを定義しました。フィールドをこの新しいフィールドセットに設定し、元のフィールドセットをWebフォームから設定解除しました。

$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 ['submitted_tree']['ContactInfo']['phone_home']が返されることです。

私が間違っていることについて何か提案はありますか?

誰かが答えた場合の2番目の質問として、これらのテキストフィールドのを変更して、クラスを「フォームテキストが必要なエラー」に設定し、残りの必須フィールドとともに赤で表示されるようにするにはどうすればよいですか。

ありがとう

4

1 に答える 1

1

このコードをwebformモジュールで記述しないでください。ただし、そのためのカスタムモジュールを作成してください。

最初のケースでは、関数は次のようになります。

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ます。

于 2010-09-29T05:59:31.953 に答える