Как очистить форму после отправки? [Решено]

Главные вкладки

Аватар пользователя Apletc Apletc 11 апреля 2013 в 14:02

Господа, столкнулся с проблемой очистки формы добавления материала после отправки. Форма обрабатывается Ajax, прекрасно работает, но не могу очистить введённые данные послу успешной отправки. Вот код модуля

<?php

/**
* Implements hook_form_alter()
*/
function ajax_add_form_alter(&$form, &$form_state$form_id) {
  switch (
$form_id) {
    case 
'<!-- id forms -->':
    
//dpm($form);
     
      
$form['#validate'] = array();
      
$form['actions']['submit']['#submit'] = array();
      
$form['actions']['submit']['#ajax'] = array(
        
'callback' => 'ajax_node_create_callback',
      );
    
     if (empty(
$form_state['build_info']['files']) || !in_array('modules/node/node.pages.inc'$form_state['build_info']['files'])) {
        
form_load_include($form_state'inc''node''node.pages');
      }

    break;
  }
}

function 

ajax_node_create_callback($form, &$form_state) {
  
node_form_validate($form$form_state);
  
  if (!
form_get_errors()) {
    
node_form_submit($form$form_state);
  }

// Вот тут начинается часть после которой всё стало отлично обрабатываться

  

$user_id $GLOBALS['user']->uid;
  
$new_form_state = array();
  
$new_form_state['build_info']['args'][] = (object) array(
    
'uid' => $user_id,
    
'name' => (isset($user->name) ? $user->name ''),
    
'type' => 'node_type',
    
'language' => LANGUAGE_NONE,
  );
  
$new_form_state['no_redirect'] = TRUE;
  
$new_form_state['input'] = array();
  
$new_form drupal_build_form('node_type_node_form'$new_form_state);

  

$commands = array();
  
$commands[] = ajax_command_remove('.messages'); // убираем стандартные ошибки
  
$commands[] = ajax_command_prepend('.b-content''<div class="ajax-messages">' theme('status_messages') . '</div>'); // добавляем свою
  //$commands[] = ajax_command_invoke('#edit-body-und-0-value', 'val', array('')); //очищаем textarea
   
$commands[] = ajax_command_replace('#form-id'drupal_render($new_form));

   return array(

'#type' => 'ajax''#commands' => $commands);
}

?>

Комментарии

Аватар пользователя boatsman boatsman 11 апреля 2013 в 16:57

в теории

в колбэке получаем новую форму $my_form = drupal_get_form('my_form')
рендерим ее $form_output = drupal_render($my_form);
и через ajax_command_replace меняем старую форму (ессно запихиваем ее предварительно в id какой-нибудь) на $form_output

как-то так

Аватар пользователя Apletc Apletc 11 апреля 2013 в 18:42

)) Да, в теории так и есть. Как раз так я пробовал, но столкнулся с ошибкой "Notice: Undefined index: form_build_id in ajax_get_form()", а решения найти не смог.. Должны же быть ещё какие-то варианты.

Аватар пользователя drupby drupby 11 апреля 2013 в 18:53

"Apletc" wrote:
node_form_validate($form, $form_state);
  
  if (!form_get_errors()) {
    node_form_submit($form, $form_state);
  }

а это зачем?это мне кажется лишнее

Аватар пользователя Apletc Apletc 11 апреля 2013 в 19:07

Спасибо drupby за толчок в нужном направлении. Коллективный разум и на этот раз победил ) Поправил код в вопросе.

Аватар пользователя fedor_cool fedor_cool 27 июня 2013 в 19:06

Apletc wrote:
Спасибо drupby за толчок в нужном направлении. Коллективный разум и на этот раз победил ) Поправил код в вопросе.

Как решилась проблема?
Аналогичная ситуация..