0

私は、互いに直接影響を与える一対のフォームフィールドに取り組んでいます。特に私が取り組んでいる問題は、私が取り組んできたこのWebサイトにユーザーが参加できる何千ものグループがあることです。サイトの管理分析フォームをいくつか作成しています。それらのフォームの一部は、グループによるフィルタリングです。

問題は、ほとんどの人が頭のてっぺんからグループの名前を知らず、それが何から始まるのかだけを知っているということです。したがって、オートコンプリートを使用する代わりに、2つのドロップダウンを考え出しました。1つ目は、オプションAからZ、グループ名が始まるアルファベットの文字を含みます。2番目のドロップダウンには、選択した文字で始まるすべてのグループが含まれます。

概念は十分に単純であり、jQueryを使用してAJAXを非常に簡単に実装することができました。ただし、これにより検証エラーが発生します。いくつかの調査の結果、これはDrupalフォームのキャッシュに関係していることがわかりました。解決策は、ahah関数を使用することです。

それに関する問題は、私がこれまでに見つけたすべての命令が、別のフィールドではなく、それ自体を更新する指定されたフィールドのahahアクションを扱っていることです。そこで、ahahを使用してグループリストを更新し、フォームキャッシュに新しい値を登録するために、文字のリストを取得する方法を理解しようとしています。

私が見つけた解決策の1つは、ページ上のすべての値を非表示のドロップダウンにロードし、必要に応じて、セット内の値を表示されているドロップダウンにロードすることでした。しかし、クライアントはほぼ独占的にIE​​を使用しており、そのような巨大なリストが与えられたときにIEがチョークするのを見たため、これは多くの問題を引き起こします。特にJavaScriptに保存されているリストの場合。したがって、軽量のソリューションが必要です。

何かご意見は?アイデア?

4

2 に答える 2

1

一言で言えば、AHAHは次のように機能します。

  • フォームは空で生成されます$form_state
  • プロパティを持つ要素#ahahが変更されると、プロパティのパスとして指定されたURLに対してajax呼び出しが行われ#ahahます。
  • そのURLのコールバックはこれを行います:
    • フォームキャッシュからフォームを取得します
    • フォームを処理します
    • $form_stateこれに基づいて要素を追加/変更できるように、現在のフォームを再構築します
    • 検証エラーを回避するために、フォームはフォームキャッシュに配置されます
    • フォームがレンダリングされ、JSONとして返されます
  • Drupalは、ラッパーdivの内容を新しいフォームに置き換えます。

あなたの場合、フォーム生成関数に$form_stateで選択された値を認識させる必要があります。それはしなければならないでしょう:

  • 文字ドロップダウンを生成する
  • $ form_stateを調べて、選択された文字があるかどうかを確認します。その場合、選択した値に基づいて2番目のドロップダウンを生成します。

コールバック関数は、フォームのキャッシュと再構築を実装します。

ここにコールバック関数のコードに関する良い説明があります:

于 2012-06-29T22:04:57.570 に答える
0

私は実際に別のStackExchangeサイトで答えを得ました。サンプルモジュールを使用してソリューションを考案するという彼の提案は、非常にうまく機能しました。

ここにある解決策:https ://drupal.stackexchange.com/questions/35048/using-drupal-6s-form-ahah-to-have-one-dropdown-field-update-the-values-of-a-sec

于 2012-07-01T21:58:17.510 に答える