Всем привет!
Большая просьба помочь в решении такой проблемы.
У меня есть задача показать форму в popup-окне из другой формы по нажатию на кнопку. С показом я справился - в ajax-callback'е кнопки показываю с помощью jquery.ui.dialog:
<?php
function ajax_test_callback($form, $form_state)
{
drupal_add_library('system', 'ui.dialog');
$form = node_add('some_content_type');
$form['actions']['preview']['#access'] = false;
$commands = array();
$commands[] = ajax_command_append('body', '<div id="popup" title="Test!"></div>');
$commands[] = ajax_command_html('#popup', render($form));
$commands[] = ajax_command_invoke('#popup', 'dialog', array(
array('autoOpen' => false),
array('width' => 'auto'),
array('height' => 'auto'),
array('modal' => true),
)
);
$commands[] = ajax_command_invoke('#popup', 'dialog', array("open"));
return array(
'#type' => 'ajax', '#commands' => $commands);
}
?>
Вот только ума не приложу, каким образом эту самую форму в popup'е засабмитить и, самое главное, в первой форме узнать, что (например, nid) засабмитилось. При нажатии на кнопку "Сохранить" происходит редирект на 'system/ajax', и ничего не сохраняется.
Буду благодарен, если кто подскажет типовые решения данной проблемы или поделится личным опытом.
Заранее спасибо!
Комментарии
В jQuery после вывода второй формы перехватываете клик на кнопке отправления и по нему отсылаете её на сервер по своему адресу (jQuery.ajax(), форматом .serialize() или .serializeArray()).
Там формируете $form_state из этих данных и делаете drupal_form_submit() (ошибки формы можно получить с помощью form_get_errors().
Затем отсюда же отправляете что надо обратно в скрипт (drupal_json_output()).
Теперь Ваш скрипт знает, что нода добавлена (или не добавлена) и её nid.
ajax_command_* конечно хорошие штуки, но в этом случае, имхо, лучше обойтись без них и сделать всё скриптом.
вот здесь в конце топика есть ссылка на модуль ,решающий подобную задачу , посмотрите его код
сам модуль
Спасибо всем большое за ответы. Попробую разобраться.