web-dev-qa-db-ja.com

拡張または「フック」する方法DrupalフォームAJAX?

私は標準の管理フォームを使用しています。このフォームには、フィールドの1つに'add_more'ボタンがあります。
example dialog with «add more» button
私の仕事は、使いやすさのために一部のフィールドをjQuery UIダイアログに移動することです。ダイアログが閉じられたら、コンテンツをフォームに手動で追加して、通常どおり送信します。
この問題は、一部のフォームパーツがダイアログ内にあるときに一部のコアajaxが送信している場合に発生します(つまり、jQuery UIダイアログがformの下部に表示されるため、bodyタグの外側にあります)。例として'add_more'ボタン。クリックすると、フォームにAJAX=とシリアル化され、ダイアログに何も入力されません。
Оh..
jQueryフォームプラグイン(Drupalで使用)にはオプション beforeSerialize があります。それは私に役立つと思いますが、Drupal.ajax.optionsを拡張してカスタムを設定する方法を知りません。

私の問題を解決する他の方法を推奨したり、Drupal JavaScriptに関するドキュメントへのリンクをいくつか提供したりできれば、私はとても幸せになります:)

ありがとう。

6
kalabro

@ yvan回答ありがとうございます。追加したリンクは良好です。
しかし、ソースコードのコメントにはより良いドキュメントがあります。それがどのように機能するかを理解したい場合は、ファイルを調べる必要がありますincludes/ajax.incおよびmisc/ajax.js
私の問題は次のように解決されました:

(function($) {
Drupal.behaviors.MyModule = {
    attach: function (context, settings) {

        // Overwrite beforeSubmit
        Drupal.ajax['some_element'].options.beforeSubmit = function (form_values, element, options) {
            // ... Some staff added to form_values
            // return false; // to prevent AJAX call if needed.
        }
        //Or you can overwrite beforeSubmit
        Drupal.ajax['some_element'].options.beforeSerialize = function (element, options) {

            // ... Some staff added to options.data
            // Also call parent function
            Drupal.ajax.prototype.beforeSerialize(element, options);
        }

                    //...

これらの関数は jQuery Form Plugin で呼び出しています。

9
kalabro

少し悲しいですが、Drupal 7のJavaScriptドキュメントは本当に貧弱ですが、Drupal 6よりはまだ優れています:)

さて、私はあなたの問題を理解し、解決策を見つけていません。あなたを助けることができるいくつかの興味深いページにあなたを送ることができます。

まず、 Ajax Forms in Drupal 7 について Ajax Framework そして最後に Example Ajax Module を調べてください。多分あなたはあなたを助けることができる何かを見つけるでしょう。

0
yvan