1

Drupalモジュールページがあり、ユーザーがアップロードできる一連のファイルの利用可能な部分のリストを含むドロップダウンをフォームに入力しています。ユーザーが特定のタイプのファイルをアップロードすると、そのオプションがリストから削除され、使用可能なすべてのファイルがアップロードされると、フォームはレンダリングされません。

問題は、Drupalが送信アクションを実行する前にフォームを描画しているため、ユーザーがページをリロードするまで操作が機能しなかったように見えることです。

これに対処する一般的な方法は何ですか?ページに移動するようにform_state['redirect']を設定しても機能しないようです。

4

3 に答える 3

3

フォームの状態に関する情報を保存するようにフォームを変更します。次に、すべてのファイルのアップロードが完了していない場合にすぐに戻る送信関数の先頭に新しいケースを追加すると、フォームが再描画されます。

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 で複数ページのフォームをググることもできます。

于 2009-01-22T17:48:32.690 に答える
1

送信ハンドラーで $form_state['redirect'] を設定すると、古いデータなしで、フォームが再読み込みされ、新しくなります。これは、フォームをクリアして、古い値がデフォルトとして使用されないようにする方法です。

$form_state['rebuild'] を使用すると、フォーム作成関数にフォームの実際の構造を再構築する機会が与えられ、フォーム送信ハンドラーの実行後にフィールドを追加したり、他のフィールドからオプションを削除したりすることができます。

このブログ投稿には、D6 で複数段階のフォームを作成する方法についての大まかなチュートリアルがあり、Drupal.org のDrupal 5 から 6 へのアップグレード ドキュメントには、$form_state の仕組みとそのさまざまなフラグの目的に関する有用な概要が含まれています。

于 2009-01-22T18:28:22.453 に答える
0

問題は、Drupalが送信アクションを実行する前にフォームを描画しているため、ユーザーがページをリロードするまで操作が機能しなかったように見えることです。

信じられない。よろしいですか?

于 2009-01-22T17:31:35.580 に答える