multipage_form_example_pre_render

Хочешь помочь с переводом? Это очень просто и быстро. Лишь зарегистрируйся, и можешь тут же начать переводить.

developer/examples/multipage_form_example.module, строка 231

Версии
5 – 6
multipage_form_example_pre_render($form_id, &$form, $next_page = TRUE)

The #pre_render of a form allows us to make changes AFTER validation (unlike hook_form_alter()), but BEFORE the form has actually been displayed. We use it to control which form elements are shown, which are hidden, and which values to set based on validate elements, not $_POST. This is a necessity for our complicated multipage example form.

Код

<?php
function multipage_form_example_pre_render($form_id, &$form, $next_page = TRUE) {
  global $form_values;

  // Make sure it's our multipage form.
  if ($form_id == 'multipage_form_example_node_form') {
    // Are we ready for the next page in our form?
    if ($next_page && isset($_POST['edit']['page']) && ($_POST['op'] != t('Back')) && ($_POST['op'] != t('Preview'))) {
      $form['page']['#value'] = $form['page']['#value'] + 1;
    }

    // Validation errors? Show previous page for correcting.
    if (form_get_errors()) {
      $form['page']['#value']--;
    }

    // Modify the #required/#type values depending on our current page.
    // The arrays tell us the pages the changes should take place in.

    // Title/body, stage 1
    multipage_form_set_element_visibility($form['title'],                     in_array($form['page']['#value'], array(1)));
    multipage_form_set_element_visibility($form['body'],                      in_array($form['page']['#value'], array(1)));

    // Person, stage 2
    multipage_form_set_element_visibility($form['person'],                    in_array($form['page']['#value'], array(2)));
    multipage_form_set_element_visibility($form['person']['fav_person'],      in_array($form['page']['#value'], array(2)));
    multipage_form_set_element_visibility($form['person']['fav_person_desc'], in_array($form['page']['#value'], array(2)));
    multipage_form_set_element_visibility($form['person']['fav_gummi'],       in_array($form['page']['#value'], array(2)), $next_page);

    // Color and number, page 3
    multipage_form_set_element_visibility($form['fav_color'],                 in_array($form['page']['#value'], array(3)));
    multipage_form_set_element_visibility($form['fav_number'],                in_array($form['page']['#value'], array(3)));

    // Movie and tv show, page 4
    multipage_form_set_element_visibility($form['fav_movie'],                 in_array($form['page']['#value'], array(4)));
    multipage_form_set_element_visibility($form['fav_tv'],                    in_array($form['page']['#value'], array(4)), $next_page);

    // Buttons
    multipage_form_set_element_visibility($form['back'],                      in_array($form['page']['#value'], array(2, 3, 4)), $next_page);
    multipage_form_set_element_visibility($form['preview'],                   in_array($form['page']['#value'], array(4)), $next_page);
    multipage_form_set_element_visibility($form['submit'],                    in_array($form['page']['#value'], array(4)), $next_page);

    // The button text actually helps determine if a form has actually been
    // submitted because the name is also the value of a clicked button. By
    // changing it for building, but not rendering, the form is not fully
    // sumbitted until we name it 'Submit', the usual value.
    if ($next_page) {
      $submit_text = array(NULL, t('Next (person)'), t('Next (color/number)'), t('Next (tv/movie)'), t('Submit'));
      $form['submit']['#value'] = $submit_text[$form['page']['#value']];
    }
  }
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Вход в систему