Вы здесь

Как правильно "склеить" две формы в одну

0

Есть две формы, каждая из них находится в разных inc файлах.
Пытаюсь их "склеить" на одной странице.
В принципе они выводятся.
Но все, что должно работать по ajax, во второй форме перестает работать.

Пробовала такие способы:
- вызвать из "главной" формы "служебную" и поместить в один массив
- вывести две формы на одной странице, просто отрендерив их через output
- применить hook_forms

Если применять hook_forms, то происходит вообще замечательная вещь. При срабатывании ajax, элемент, который должен обновиться пропадает.

Версия Drupal: 
7.x
Категория: 
AJAXForm API
Вопрос задан 25.08.2015 - 18:27

Ответы

1

Создать 3й колбэк для формы, в котором уже смерджить массивы двух нужных вам форм. При этом для получения массивов использовать не drupal_get_form а непосредственно вызов каждого колбэка.
Примерно так

function my_form_3($form, &$form_state) {
    $form = my_form_1($form, $form_state);
    $form = my_form_2($form, $form_state);
    return $form;
}

Ну и не забыть про то, что может появится несколько кнопок или наоборот, вторая форма перезапишет поля первой формы с тем же именем.

Ответ дан 25.08.2015 - 22:11

наверное, скобочки пропустили

function my_form_3($form, &$form_state) {
    $form[] = my_form_1($form, $form_state);
    $form[] = my_form_2($form, $form_state);
    return $form;
}
Комментарий оставлен 26.08.2015 - 07:47
1

Две формы с ajax-ом работают нормально, тестировал на коде - http://pastebin.com/zTWpQWKH
Что то делаете не так.

Ответ дан 26.08.2015 - 13:44
Аватар пользователя xandeadx
xandeadx
1542

:) алерты-то нормально будут работать.
а вот если надо инсертить что-нить, то в коллбэке надо прописывать элемент с учетом новой иерархии
ajax_command_insert('#сюдой', drupal_render($form['form_1']['нужный элемент']));
вот это я и делала неправильно

Комментарий оставлен 26.08.2015 - 15:24
0

Не ясно зачем, но можно через _form_alter к первой добавить нужное из второй, не забыть при этом #submit, #validate, #attached и т.д.

Ответ дан 25.08.2015 - 20:04