Проблема с AHAH постингом формы.

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

Аватар пользователя Zigs Zigs 3 декабря 2009 в 20:37

В общем кажется, что все сделано в соответствии с http://drupal.org/node/331941

Есть форма, на сабмит навешен ahah:

$form['submit']['#ahah'] = array(
        'path' => 'my_form_submit/js',
        'wrapper' => 'comments-list-view',
        'event' => 'click',
        'method' => 'before',
  );

Вот обработчик ahah запроса:

function my_form_submit_ahah()
{
  $form_state = array('storage' => NULL, 'submitted' => FALSE);
  $form_build_id = $_POST['form_build_id'];
  $form = form_get_cache($form_build_id, $form_state);

  $args = $form['#parameters'];

  $form_id = array_shift($args);
  $form_state['post'] = $form['#post'] = $_POST;
  $form['#programmed'] = $form['#redirect'] = FALSE;

  drupal_process_form($form_id, $form, $form_state);
  $form = drupal_rebuild_form($form_id, $form_state, $args, $form_build_id);

  $errors = theme('status_messages');
  $output = $errors . drupal_render($form);

  ....

Проблема даже не с самим постингом, он выполняется нормально. Проблема в том, что action возвращаемой формы в drupal_render формы содержит путь my_form_submit/js, а не тот, который был указан по умолчанию. Соответственно повторный сабмит приводит перезагрузке страницы и текстовому отображению массива, который возвращается в $output.

Почему так происходит? Как бороться?

Комментарии

Аватар пользователя gorr gorr 4 декабря 2009 в 11:22

Потому, что если у формы не указать action, то по умолчанию он выставляется равным $_GET['q'], в данном случае my_form_submit/js. Можно в обработчике выставить action $form['#action'] = 'тот путь, который нужен';

Аватар пользователя Zigs Zigs 11 декабря 2009 в 16:05

Возникла еще одна проблема. Даже две.
Первая: У меня на странице ноды размещаются несколько ajax закладок (jquery.tabs), на одной из них и лежит форма, которая должна поститься через ahah. Первый постинг проходит нормально. Но если форма содержит ошибки, то она возвращается на клиента вместе с сообщениями об этих ошибках. Вот только повторного постинга ahah уже не происходит. Происходит перезагрузка страницы. Причем action обновленной формы содержит нормальный путь (node/_номер_). После того как был запущен повторный постинг, путь в адресной строке меняется на node/node/_номер_, т.е. появляется, непонятно откуда, дополнительный сегмент /node/, соответственно - 'Requested page is no found'.
Если же убрать закладки и вывести форму на отдельную, то все работает отлично. Постить можно сколько угодно раз.

Вторая проблема возникает на форме с полем типа data popup. Для выбора даты там используется popup calendar, который появляется при клике на этом поле. Так вот после того как форма вернулась на клиента после ahah постинга (например в случае ошибки ввода), то календарь уже не показывается.

Посоветуйте что-нибудь, плиз.