Господа, столкнулся с проблемой очистки формы добавления материала после отправки. Форма обрабатывается 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);
}
?>
Комментарии
в теории
в колбэке получаем новую форму $my_form = drupal_get_form('my_form')
рендерим ее $form_output = drupal_render($my_form);
и через ajax_command_replace меняем старую форму (ессно запихиваем ее предварительно в id какой-нибудь) на $form_output
как-то так
http://drupal.stackexchange.com/questions/4593/reset-node-form-after-aja...
)) Да, в теории так и есть. Как раз так я пробовал, но столкнулся с ошибкой "Notice: Undefined index: form_build_id in ajax_get_form()", а решения найти не смог.. Должны же быть ещё какие-то варианты.
а это зачем?это мне кажется лишнее
Без этой строки не будет обрабатываться колбак. Подробнее вот тут http://drupal.org/node/1245708
Спасибо drupby за толчок в нужном направлении. Коллективный разум и на этот раз победил ) Поправил код в вопросе.
Как решилась проблема?
Аналогичная ситуация..