1

フィールドが 1 つだけのシンプルなフォームを Drupal7 で作成したいと考えています。送信ボタンを押すと、フィールド値で ajax 関数を呼び出し、リロードせずにページの DIV を更新する必要があります。

私は Drupal フォーム API に詳しくありません。フォーム API ドキュメントからサンプルを実装しようとしましたが、常に次のようなエラーが発生します。

Notice: Undefined index: #title_display form_pre_render_conditional_form_element() függvényben (/var/www/nmtest/includes/form.inc 2986 sor). Notice: Undefined index: #value theme_textarea() függvényben /var/www/nmtest/includes/form.inc 3727 sor).

カスタム ページを作成し、ネイティブ PHP を使用するだけでそれを行うことができますが、これは「エレガントな」方法ではありません。

ここに似たものが必要ですが、フォームの検証やページのリロードなどは必要ありません: Drupal で非常に単純なフォームを作成する

ajax 関数を呼び出すボタンが 1 つだけ必要です。フォーム API でこれを行うべきですか、それともプレーンな古いネイティブ PHP と jQuery を使用するべきですか?

編集: IMG タグの SRC を変更するだけでよいため、実際の ajax 呼び出しも必要ないようです。

これが私がネイティブPHPで行ったことです。このトラフ フォーム API を実現したい:

<script>
    function getstar() {            
        starpoints = jQuery('#starpoints').val();
        rand = Math.floor(Math.random() * 9999) + 1;
        src = "test.php?star=" + starpoints + '&rand=' + rand;            
        jQuery('#starimg').attr("src",src);            
        return false;
    }        
</script>
<form>
<input type="text" name="starpoints" id="starpoints" />
<input type="submit" onclick="return getstar();" />
</form>
<img src="/test.php?star=5" id="starimg" />

編集: OK、Drupal API を使用してフォームをレンダリングすることができました。唯一のことは、モジュールを介して IMG のプレースホルダーを挿入したいということですが、その方法がわかりません。フォームは正常にレンダリングされますが、その後に HTML ブロックを追加したいと考えています。現在、私はjavascriptでそれを行います:

jQuery(document).ready(function() {
jQuery('<div><br /><img id="starimg" src="" /></div>').insertAfter('#drawstar-form');
});

フォームの後にこの HTML ブロックをレンダリングするには、どのフックをキャッチする必要がありますか? drupal_get_formを試しましたが、配列が返され、HTML ブロックをアタッチできません。

4

1 に答える 1

1

フォーム API は、JavaScript コードを 1 行も書かずにこれを行うために必要なすべてを提供します。http://drupal.org/node/752056およびhttp://api.drupal.org/api/examples/ajax_example!ajax_example.module/function/ajax_example_simplest/7およびを参照してください。

于 2012-10-22T16:39:43.267 に答える