Форма Drupal отображается перед отправкой действия - PullRequest
1 голос
/ 22 января 2009

У меня есть страница модуля Drupal, где я заполняю форму раскрывающимся списком, содержащим список доступных частей набора файлов, которые пользователь может загрузить. Как только пользователь загружает файл определенного типа, он удаляет эту опцию из списка, и когда все доступные файлы загружены, форма не будет обработана.

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

Какой распространенный способ справиться с этим? Настройка form_state ['redirect'] для перехода на страницу, похоже, не работает.

Ответы [ 3 ]

3 голосов
/ 22 января 2009

Вы изменяете свою форму так, чтобы она сохраняла некоторую информацию о состоянии формы. Затем вы добавляете новый случай в начало функции отправки, которая немедленно возвращается, если вы не закончили загружать все файлы, и она будет перерисовывать форму.

function modulename_uploader_form(&$form_stuff=null) {
//the function that sets your form array
$stuff = (isset($form_stuff['values'])) ? 
    $form_stuff['storage']['done_uploading'] : 
    false; //if values isnt set, this is the first visit. 
$form_stuff['storage']['done_uploading'] = done_uploading();
.... the rest of your form creation function.


function modulename_uploader_submit($form, &$form_stuff) {
    if($form_stuff['storage']['done_uploading']) {
return;
}
... rest of the function

убедитесь, что вы сбросили переменную хранилища, когда закончите обработку формы. Вы также можете гуглить многостраничные формы в drupal.

1 голос
/ 22 января 2009

Установка $ form_state ['redirect'] в вашем обработчике отправки приведет к перезагрузке формы, новой, без старых данных. Это способ очистки формы, чтобы старые значения не зависали по умолчанию.

Возможно, вы захотите использовать $ form_state ['rebuild'], который дает вашим функциям построения формы возможность перестроить фактическую структуру формы, добавив дополнительные поля или удалив параметры из других полей после запуска обработчиков отправки формы.

В этом блоге содержится грубое руководство по созданию многоэтапных форм в D6, а Документы по обновлению Drupal 5-6 на Drupal.org содержат полезный обзор того, как form_state работает и для чего его различные флаги.

0 голосов
/ 22 января 2009

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

Я не могу в это поверить. Вы уверены в этом?

...