我有一個Drupal模塊頁面,我用一個下拉列表填充表單,其中包含用戶可以上傳的一組文件的可用部分列表。一旦用戶上傳了某種類型的文件,它將從列表中刪除該選項,並且當所有可用文件上傳時,表單將不會被渲染。提交動作之前呈現的Drupal表單
問題在於,Drupal在執行提交操作之前繪製了表單,因此用戶覺得該操作在重新加載頁面之前無法使用。
處理這個問題的常用方法是什麼?設置form_state ['redirect']進入頁面似乎不起作用。
我有一個Drupal模塊頁面,我用一個下拉列表填充表單,其中包含用戶可以上傳的一組文件的可用部分列表。一旦用戶上傳了某種類型的文件,它將從列表中刪除該選項,並且當所有可用文件上傳時,表單將不會被渲染。提交動作之前呈現的Drupal表單
問題在於,Drupal在執行提交操作之前繪製了表單,因此用戶覺得該操作在重新加載頁面之前無法使用。
處理這個問題的常用方法是什麼?設置form_state ['redirect']進入頁面似乎不起作用。
您可以修改表單,以便保存表單狀態的一些信息。然後,如果您沒有完成上傳所有文件,則會在提交函數的開始處添加一個新案例,該案例會立即返回,並且會重新繪製表單。
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中使用Google多頁面表單。
問題是,Drupal在執行提交操作之前正在繪製表單,因此用戶覺得該操作在重新加載頁面之前不起作用。
我簡直不敢相信。對此有把握嗎?
在您的提交處理程序中設置$ form_state ['redirect']將導致表單重新加載,而沒有舊數據。這是清除表單的一種方式,以便舊值不會作爲默認值停留。
您可能想要使用$ form_state ['rebuild'],它使窗體構建函數有機會重新構建表單的實際結構,在表單提交處理程序運行後添加更多字段或從其他字段中刪除選項。
This blog post對在D6做多階段形成粗糙的教程,並在Drupal.org的Drupal 5 to 6 upgrade docs包含如何$ form_state作品和它的各種標誌是什麼的一個有用的概述。
是的,基本流程顯示在這裏:http://www.flickr.com/photos/thecancerus/2394730671/sizes/o/ – alxp 2009-01-22 17:32:29