Доброго времени суток, товарищи эксперты. Изучаю AJAX Forms, в качестве учебного примера создал опросник(3 элемента формы "#type" => 'radios' и 1 submit) ничего сверхъестественного. На submit прицепил
'#ajax' => array(
'method' => 'replace',
'callback' => 'quest_form_ajax_callback',
'wrapper' => 'quest'
),
Описал callback-функцию.
callback-функция прекрасно отрабатывает, возвращает нужный мне результат, но вот замещать форму этим самым результатом не торопится. Хотя это, как я понял, должно произойти если выставить 'method' => 'replace', а в качестве врапера указать тот, в котором находится форма.
Подскажите, пожалуйста, что я упускаю?
Вложение | Размер |
---|---|
questionnaire.module | 769 байт |
return.png | 14.02 КБ |
questionnaire.zip | 8.91 КБ |
Комментарии
Приведите полный листинг кода. А вообще у меня была сходная ситуация, когда изменения в формепыталась сделать в колбэк-функции. Колбэк должен вернуть лишь тот элемент массива формы, который был изменен (ну или всю форму) . Изменения формы должны происходить в _form_alter ().
Пример тут http://drupal.org/node/752056
Прикрепил текст модуля в ОЧЕНЬ упрощенном виде, чтоб не отвлекаться на посторонние моменты, а так же изображение с возвращаемым результатом(По этому поводу тоже вопрос. Такой и должен возвращаться результат от callback'a?)
don't have permission to access /files/questionnaire.module on this server. а по поводу результата колбэка - да, оно примерно так и выглядит.
Ок, я всю папку залью
http://zalil.ru/upload/32844079 - весь модуль
http://zalil.ru/upload/32844088 - облегченная версия
<?php
$output .= '<div calss = "questionnaire">';
?>
По сути, у Вас две формы, каждая из которых должна строиться по своим данным. Первая для указания параметров, вторая — отображения результатов. В Вашей функции построения формы можно поставить условие
<?php
if (isset($form_state['triggering_element']))
?>
если выполняется — строим вторую форму по данным $form_state (запрос, получение результа),
если нет — строим первую, для указания параметров.
Функция обратного вызова ajax
<?php
function questionnaire_from_ajax_callback($form, $form_state) {
return $form;
}
?>
Учтите, по срабатыванию события вызывается функция построения формы (это, наверное, самый сложный момент в понимании AJAX), а не коллбэк. Коллбэк только указывает нужную для замены часть формы (ajax_commands — немного другое дело).
ЗЫ. И с использованием темизации разобраться лучше