Категория:
Опубликовано:

Сбрасываем форму отправленную AJAX'ом (ч.2)

Drupal AJAX clear form

Ранее, я уже писал "Как очистить форму отправленную AJAX'ом".

Добавлю еще один вариант, с использованием - AJAX-commands.

Пригодится в случае, когда необходимо произвести дополнительные действия. Например добавить отправленные данные на текущую страницу, без перезагрузки.

Вот такая вот у нас будет формочка для демонстрации:

function MY_MODULE_form($form, &$form_state) {
  // Записываем уникальный ID формы
  $form_state['#wrapper_id'] = drupal_clean_css_identifier(__FUNCTION__);

  $form = array(
    '#prefix' => "<div id='{$form_state['#wrapper_id']}-wrapper'>",
    '#suffix' => '</div>',
  );

  $form['submit'] = array(
    '#type'   => 'submit',
    '#value'  => t('Send'),
    // Основной коллбек формы
    '#submit' => array('MY_MODULE_form_send'),
    '#ajax'   => array(
      // AJAX-коллбек
      'callback' => 'MY_MODULE_ajax_callback',
      // Селектор который будем обновлять
      'wrapper'  => $form_state['#wrapper_id'] . '-wrapper',
    ),
  );

  return $form;
}

Далее, в AJAX-коллбеке возвращаем массив команд:

function MY_MODULE_ajax_callback($form, &$form_state) {
  // Отменяем переадресацию
  $new_form_state['no_redirect'] = TRUE;
  // Сбрасываем значения
  $new_form_state['input']       = array();
  // Строим новую форму
  $new_form                      = drupal_build_form('MY_MODULE_form', $new_form_state);

  // Добавляем команды
  $commands   = array();
  $commands[] = ajax_command_replace("#{$form_state['#wrapper_id']}-wrapper", drupal_render($new_form));
  // Здесь можно добавить необходимые команды

  return array(
    '#type'     => 'ajax',
    '#commands' => $commands,
  );
}

Профит!

Список команд по умолчанию

Если у Вас возникли вопросы, замечания, предложения или просто благодарность - пишите в комментариях.
Делитесь полезными материалами в социальных сетях.
Добавить комментарий