web-dev-qa-db-ja.com

カスタムWebフォームのハニーポット(手動)

カスタムフォームを作成しています(フィールドは_drupal_render_を使用して追加されます)が、すべてのWebフォームでハニーポットが有効になっているため、フォームを送信すると、次のメッセージが表示されます。

フォームの送信に問題がありました。 X秒待ってから再試行してください。

これは、ハニーポットのマークアップがカスタムフォームに含まれていないためです。

2つのオプションがあります。

  1. このフォームのハニーポットを無効にします(Drupal管理メニューからのモジュール設定では不可能)例外を追加するにはどうすればよいですか?
  2. ハニーポットを手動で有効にします(おそらく_drupal_render_ sを使用)。

ハニーポットのドキュメントはとても貧弱なので、次の方法でハニーポットのマークアップを手動で追加しようとしました:<?php print drupal_render($form['honeypot_time']); ?> <?php print drupal_render($form['url']); ?>

実際にはマークアップが追加されますが、まだ修正されていません。

2
Asarattha G

モジュールのドキュメント によると、これを行うことができます:

ハニーポットを独自のフォーム、または独自のモジュールのhook_form_alterを介して任意のフォームに追加する場合は、次の関数呼び出しをフォームビルダー関数内(またはhook_form_alter内)に配置するだけです。

<?php
  honeypot_add_form_protection($form, $form_state, array('honeypot', 'time_restriction'));
?>

配列にオプションを含めるか含めないことにより、ハニーポットフィールドまたはフォームの時間制限を有効または無効にできることに注意してください。

HoneypotのAPI を使用して、フォームの遅延時間を変更したり、特定のフォームの保護を追加または削除したりすることもできます。

7
Scott Joudry