Drupal 7 Captcha in allen Webformularen oder Webformularen nach Inhaltstyp

9

Ich bin auf D7.

Ich habe einen Inhaltstyp, der Webform aktiviert ist.

Voraussetzung Ich muss Captcha für alle Webformulare für Knoten dieses Inhaltstyps implementieren.

Problem In D7 sollten Sie die form_id auf der Einstellungsseite angeben, um Captcha im Formular zu erhalten. Ich werde jedoch viele Formulare mit allen verschiedenen form_ids haben.

Ich benutze das Captcha- Modul.

Gibt es eine Möglichkeit, meine Anforderung umzusetzen?

SGhosh
quelle

Antworten:

9

Sie können der template.php den folgenden Code hinzufügen

if (strstr($form_id, 'webform_client_form')) {
        $form['my_captcha_element'] = array(
            '#type' => 'captcha',
            '#captcha_type' => 'image_captcha/Image',
        );
    }

Dies sollte im yourthemename_form_alter platziert werden

Mohammed Shameem
quelle
Vielen Dank. Ich habe gerade diese Lösung bekommen, sie zum Laufen gebracht, bin zurückgekommen, um meine eigene Frage zu beantworten, und habe gesehen, dass Sie sie bereits haben. :) Trotzdem danke für die Hilfe.
SGhosh
Damit Ihr benutzerdefinierter Code die Berechtigungen für diejenigen Personen berücksichtigt, die CAPTCHA überspringen können, fügen Sie Ihrer Logik Folgendes hinzu: if ((strstr ($ form_id, 'webform_client_form')) &&! (User_access ('CAPTCHA überspringen')) {$ form ['my_captcha_element'] = array ('#type' => 'captcha', '#captcha_type' => 'default',); }
Kbrinner
1

Alternativ können Sie diesen Code in ein benutzerdefiniertes Modul einfügen:

/**
* Implementation of hook_form_alter().
*/
function mymodule_form_alter(&$form, $form_state, $form_id) {
  if (preg_match("/^webform_client_form_[0-9]+$/",$form_id) && user_is_logged_in() == FALSE) {
    $form['my_captcha_element'] = array(
      '#type' => 'captcha',
    );
  }
}

Quelle: https://drupal.org/node/255795

Antonello
quelle
0

Fügen Sie Ihrer Logik Folgendes hinzu, damit Ihr benutzerdefinierter Code die unter admin / people / permissions festgelegten Berechtigungen für diejenigen Personen berücksichtigt, die CAPTCHA überspringen können:

if ((strstr($form_id, 'webform_client_form')) && !(user_access('skip CAPTCHA'))) {
    $form['my_captcha_element'] = array(
      '#type' => 'captcha',
      '#captcha_type' => 'default',
    );
  }
kbrinner
quelle