Почему сообщение о статусе drupal 6 не показывает, какие поля являются обязательными при первой отправке формы - PullRequest
1 голос
/ 15 октября 2011

Когда я отправляю форму без заполнения одного из обязательных полей (или любой комбинации обязательных полей), не отображается сообщение о состоянии, чтобы сообщить мне, что я пропустил обязательные поля.Во второй раз, когда я отправляю форму, сообщение о состоянии показывает, какие поля являются обязательными.Похоже, что сообщение о статусе находится на один шаг после отправки формы.

Если после первой отправки я изменю поля, которые будут заполнены, и снова отправлю, тогда появится сообщение о состоянии, которое должно было отображаться в предыдущий раз.

Когда форма заполнена правильно, она отправляется как обычно.

Форма отображается с использованием drupal_get_form ('otherWaysToRequest');Это вызывается в файле шаблона в теме.

Кто-нибудь знает, почему сообщение о состоянии отстает на шаг?

Это пример используемого кода

function otherWaysToRequest(&$form_state)
{
    global $base_url;
    $pathToTheme = path_to_theme();

    $form['top-check'] = array(
        '#type'     => 'fieldset',
        '#attributes' => array('class' => 'checkboxes'),
    );

    $form['top-check']['gift'] = array(
        '#title'     => t('Included a gift'),
        '#type'      => 'checkbox',
        '#suffix'    => '<br />',
        '#required'  => false,
    );

    $form['top-check']['contact'] = array(
        '#title'     => t('I would like to speak to you'),
        '#type'      => 'checkbox',
        '#suffix'    => '<br />',
        '#required'  => false,
    );

    $form['name'] = array(
        '#title'     => t('Name'),
        '#type'      => 'textfield',
        '#required'  => true,
    );


    $form['email'] = array(
        '#title'     => t('Email Address'),
        '#type'      => 'textfield',
        '#required'  => true,
    );

    $form['bottom-check'] = array(
        '#type'     => 'fieldset',
        '#attributes' => array('class' => 'checkboxes'),
        '#description' => t('<p class="Items">If you have ...:</p><p class="Items">I have included .....</p>')
    );

    $form['bottom-check']['share'] = array(
        '#title'     => t('A Share'),
        '#type'      => 'checkbox',
        '#suffix'    => '<br />',
        '#required'  => FALSE,
    );

    $form['submit'] = array(
        '#type'         =>  'image_button',
        '#src'          =>  $pathToTheme.'/image.gif',
        '#value'        =>  t('Submit Form'),
    );
}

function otherWaysToRequest_validate($form, &$form_state)
{
    $mail_reg_ex     = '/[-a-zA-Z0-9._]+[@]{1}[-a-zA-Z0-9.]+[.]{1}[a-zA-Z]{2,4}/';

    if(!preg_match($mail_reg_ex, $form_state['values']['email']))
    {
        form_set_error('email', t('Invalid email address.'));
    }
    if( 0 == $form_state['values']['gift'] & 0 == $form_state['values']['contact'] )
    {
        form_set_error('gift', t('You must choose one of the first two options on the form'));
    }
}

function otherWaysToRequest_submit($form, &$form_state)
{
    //mail details
}

1 Ответ

0 голосов
/ 15 октября 2011

Это потому, что к тому времени, когда вы вызываете drupal_get_form в файле шаблона, сообщения уже были переданы для текущей страницы;поэтому ваши сообщения проверки будут отображаться на экране, который находится на следующей странице загрузки, отображаются сообщения next time.

Вы должны создать форму в пользовательском модуле, а не в темечтобы обойти это.Самый простой способ - создать блок, который можно назначить региону (используя hook_block в Drupal 6 или комбинацию hook_block_info() и hook_block_view в Drupal 7).

...