フィールドが 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 ブロックをアタッチできません。