web-dev-qa-db-ja.com

Drupal Form APIを使用してフォームを自動送信する方法は?

drupalフォームの作成についてサポートが必要です。フォームを作成しましたが、完全に正常に機能します。ユーザーのメール、IP、日付と時刻をキャプチャするだけです。問題フォームを送信するためにユーザーがボタンをクリックする必要がないようにしたいのですが、1秒後などにフォームを自動的に送信したいのです。

//form hook, form elements start here

function form_casl_form($form, &$form_state) {
//sometext here
 $form['some_text'] = array(
    '#markup' => '<p><b>Simply click the button to subscribe.</b>
    </p>'
);


  //submit button
  $form['submit_button'] = array(
    '#type' => 'submit',
    '#value' => t('Subscribe'),

  );
  return $form;
}
    //validate hook

とにかくこれを行うにはありますか?私は仕上げに非常に近づいており、これが私が行き詰まっている唯一のことです。どんなアイデアでもいただければ幸いです!

3
Ezra Gibson

DrupalフォームAPIのみを使用してフォームを自動送信するソリューションはありません。これを実現するには、軽量のカスタムJavaScriptをフォームに追加する必要があります。JavaScriptを追加する適切な方法あなたのフォームは、フォームの #attach 属性を使用することです。

$form['#attached']['js'][] = drupal_get_path('module', 'YOURMODULE') . '/YOURMODULE.js';

JavaSriptコードitslef かなり単純です 、それを Immediately Invoked Function Expression で適切にラップし、 Drupal.behaviors および-を使用することを忘れないでください jQuery 1回

Drupal.behaviors.YOURMODULE = {
  attach: function(context, settings) {
    $('.your-form-selector', context).once('YOURMODULE').delay(10000).submit();
  }
}
3
Pierre Buyle

これは、'onChange'配列に'#attributes'を追加することによる非常に簡単な方法です。

/**
 * Custom form handler.
 */
function FORM_EXAMPLE($form, &$form_state) {

  $form['complete_projects_radios'] = [
    '#type'          => 'radios',
    '#title'         => t('Project status'),
    '#default_value' => 0,
    '#options'       => [
      0 => t('Current'),
      1 => t('Complete'),
    ],
    // Define the onChange like so:
    '#attributes'    => [
      'onChange' => 'this.form.submit();',
    ],
  ];

  $form['complete_projects_submit'] = [
    '#type'       => 'submit',
    '#value'      => t('Apply'),
    // The submit itself is necessary, but now it can be hidden:
    '#attributes' => [
      'style' => ['display: none;'],
    ],
  ];

  return $form;
}
7
leymannx