Защита форм от спам-ботов модулем Simple Anti-Spam и как включить его автоматически для всех форм WebForm

Drupal: 

Если ваш сайт на Drupal имеет много форм обратной связи ( Webform ) или других, тогда возникает задача защитить их все от спама. Отлично с этим справляется модуль Simple Anti-Spam, добавляя галку "Я не спамер" к тем формам, которые вы прописали в настройках этого модуля: Конфигурация - Simple Anti-Spam, то есть тут: /admin/config/system/simpleantispam .
Для ручной настройки модуля для выбранной формы нужно:
узнать id формы (form_id) - для этого нужно открыть html-код страницы и найти по уникальной фразе form_id тег: <input name="form_id" value="webform_client_form_227"> - в поле value содержится нужная строка,
открыть настройки модуля /admin/config/system/simpleantispam и прописать для предложенного варианта такую строку:
webform_client_form_227|10
что означает добавить поле "Я не спамер" в конец (вес = 10) на страницу с формой webform_client_form_227.

Чтобы увидеть это поле, нужно открыть форму от анонима (возможно, в другом браузере, потому что это поле удаляется после прохождения этой защиты 1 раз с вашего компьютера).

Что делать, если на сайте много форм типа Webform, которые нужно защитить от спам-ботов все?

Вручную много форм очень тяжело добавлять, поэтому нужно упростить задачу: автоматически добавлять поле "Я не спамер" для всех форм типа Webform. Изначально модуль это не предусматривает, но следующий код решает задачу.
Следующий хук можно вставить в файл template.php вашей темы и изменить слово MYTHEME на имя, которое используется в этом файле template.php для других функций. Также хук можно оформить в виде своего модуля, что тоже будет работать (но использование в теме предпочтительнее в плане производительности).
Надёжность хука 80%.

  1. /* adds antispam field to all webforms for anonymous for anti-bot */
  2. function MYTHEME_form_webform_client_form_alter(&$form, &$form_state, $form_id) {
  3. if (!user_is_anonymous()) {
  4. return;
  5. }
  6.  
  7. $form['smplntspm1'] = array(
  8. '#type' => 'checkbox',
  9. '#title' => t('I\'m not a spammer'),
  10. '#weight' => 50,
  11. );
  12.  
  13. $form['smplntspm2'] = array(
  14. '#type' => 'checkbox',
  15. '#title' => t('I\'m a spammer'),
  16. '#weight' => 50,
  17. '#prefix' => '<div class="element-invisible">',
  18. '#suffix' => '</div>',
  19. );
  20.  
  21. $form['#validate'][] = 'simpleantispam_form_validate';
  22. $form['#attached']['library'][] = array('system', 'jquery.cookie');
  23. $form['#attached']['js'][] = drupal_get_path('module', 'simpleantispam') . '/simpleantispam.js';
  24.  
  25. }

Хук MYTHEME_form_webform_client_form_alter() вызывается для каждой формы типа Webform. Он содержит строки из кода модуля Simple AntiSpam. Для поля "Я не спамер" в этом хуке прописан вес 50, то есть в самом низу (можно 10, но сделано с запасом для возможных ваших полей).