drupal_process_form

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

includes/form.inc, строка 390

Версии
5
drupal_process_form($form_id, &$form)
6
drupal_process_form($form_id, &$form, &$form_state)

Эта функция является основной в Forms API. Предназначена для построения формы и проверки формы на соответствие требованиям и обработки результатов.

Параметры

$form_id Уникальная строка, идентифицирующая текущую форму.

$form Ассоциативный массив, содержащий структуру формы

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

Связанные темы

▾ 4 функции вызывают drupal_process_form()

drupal_execute in includes/form.inc
Извлекает форму по form_id, заполняет ее значениями из $form_state['values'], обрабатывает, и возвращает ошибки обработки этой формы. Эта функция — аналог drupal_get_form(), используемый для программной работы с формами.
drupal_get_form in includes/form.inc
Получает форму из функции-конструктора или извлекает её из кеша, если форма была сформирована на предыдущей загрузке страницы. Далее функция проводит проверку и обработку данных, и, если необходимо формирует её HTML-код.
drupal_rebuild_form in includes/form.inc
Retrieves a form, caches it and processes it with an empty $_POST.
poll_choice_js in modules/poll/poll.module
Коллбэк меню для AHAH добавления пунктов.

Код

<?php
function drupal_process_form($form_id, &$form, &$form_state) {
  $form_state['values'] = array();

  $form = form_builder($form_id, $form, $form_state);
  // Only process the form if it is programmed or the form_id coming
  // from the POST data is set and matches the current form_id.
  if ((!empty($form['#programmed'])) || (!empty($form['#post']) && (isset($form['#post']['form_id']) && ($form['#post']['form_id'] == $form_id)))) {
    drupal_validate_form($form_id, $form, $form_state);

    // form_clean_id() maintains a cache of element IDs it has seen,
    // so it can prevent duplicates. We want to be sure we reset that
    // cache when a form is processed, so scenerios that result in
    // the form being built behind the scenes and again for the
    // browser don't increment all the element IDs needlessly.
    form_clean_id(NULL, TRUE);

    if ((!empty($form_state['submitted'])) && !form_get_errors() && empty($form_state['rebuild'])) {
      $form_state['redirect'] = NULL;
      form_execute_handlers('submit', $form, $form_state);

      // We'll clear out the cached copies of the form and its stored data
      // here, as we've finished with them. The in-memory copies are still
      // here, though.
      if (variable_get('cache', CACHE_DISABLED) == CACHE_DISABLED && !empty($form_state['values']['form_build_id'])) {
        cache_clear_all('form_'. $form_state['values']['form_build_id'], 'cache_form');
        cache_clear_all('storage_'. $form_state['values']['form_build_id'], 'cache_form');
      }

      // If batches were set in the submit handlers, we process them now,
      // possibly ending execution. We make sure we do not react to the batch
      // that is already being processed (if a batch operation performs a
      // drupal_execute).
      if ($batch =& batch_get() && !isset($batch['current_set'])) {
        // The batch uses its own copies of $form and $form_state for
        // late execution of submit handers and post-batch redirection.
        $batch['form'] = $form;
        $batch['form_state'] = $form_state;
        $batch['progressive'] = !$form['#programmed'];
        batch_process();
        // Execution continues only for programmatic forms.
        // For 'regular' forms, we get redirected to the batch processing
        // page. Form redirection will be handled in _batch_finished(),
        // after the batch is processed.
      }

      // If no submit handlers have populated the $form_state['storage']
      // bundle, and the $form_state['rebuild'] flag has not been set,
      // we're finished and should redirect to a new destination page
      // if one has been set (and a fresh, unpopulated copy of the form
      // if one hasn't). If the form was called by drupal_execute(),
      // however, we'll skip this and let the calling function examine
      // the resulting $form_state bundle itself.
      if (!$form['#programmed'] && empty($form_state['rebuild']) && empty($form_state['storage'])) {
        drupal_redirect_form($form, $form_state['redirect']);
      }
    }
  }
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

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