web-dev-qa-db-ja.com

失敗したフォーム要素の検証で表示されるエラーメッセージを、要素の「#title」テキストと異なるように変更するにはどうすればよいですか?

カスタムフォームモジュールを書いています。

Drupal7のFormAPIを使用してチェックボックスを作成し、その横に表示されるラベル/テキストをここで説明するように設定します

http://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#checkbox

#titleプロパティを使用して、

    $form['test'] = array(
    '#type'     => 'checkbox',
    '#title'    => t('This is the text that gets displayed next to the checkbox'),
    '#required' => TRUE,
    );

次にブラウザに表示されます

[ ] This is the text that gets displayed next to the checkbox

たとえば、そのチェックボックスに関連する送信エラーがあります。上記の例では必須であるがチェックされていない場合、次のようなコンテンツ領域の上部にエラーボックスが表示されます。

"X  The This is the text that gets displayed next to the checkbox field is required"

表示されたエラーメッセージをラベル/テキスト以外のものに変更したい。たとえば、エラーの場合、

"X  Selecting the displayed checkbox is required."

または

"X  You forgot to check the required checkbox.  Please try again."

エラーメッセージテキストを、割り当てられたラベル/テキストと異なるように設定するにはどうすればよいですか?

2
user9281

カスタムモジュールで基本的なフォームを使用する:

    function customform_demo($form, $form_state) {
    $form['test'] = array(
        '#type' => 'checkbox',
        '#title'    => t('This is the text that gets displayed next to the checkbox'),
        '#required' => TRUE,
    );

    $form['test_submit'] = array(
        '#type' => 'submit',
        '#value' => t('Submit'),
    );

    return $form;

}

フォーム検証関数でカスタムエラーメッセージを設定できます。これは、いくつかのコメント付きの基本的な例です。

    function customform_demo_validate($form, &$form_state) {

    // Test for existing form errors
    if (form_get_errors()) {

        // Save errors
        $form_errors = form_get_errors();
        $drupal_errors = drupal_get_messages('error');

        // Clear form errors
        form_clear_error();

        foreach($drupal_errors['error'] as $key => $error) {
            if (in_array($error, $form_errors)) {
                // Unset form errors
                unset($drupal_errors['error'][$key]);
            }
        }

        // Rebuild drupal errors
        foreach($drupal_errors['error'] as $key => $message) {
            drupal_set_message($message, 'error');
        }

        // Validate form field and set error message    
        if ( $form_state['values']['test'] === 0 ) {
            form_set_error('test', t('You forgot to check the required checkbox. Please try again.'));
        }

                // Add more validation tests and error messages

    }
}
2
Gabriel