Je suis sur D7.
J'ai un type de contenu qui est activé par formulaire Web.
Exigence J'ai besoin d'implémenter captcha pour tous les formulaires Web pour les nœuds de ce type de contenu.
Problème Dans D7, vous êtes censé donner le form_id dans la page des paramètres pour obtenir le captcha dans le formulaire, mais j'aurai beaucoup de formulaires avec tous différents form_ids.
J'utilise le module Captcha .
Existe-t-il un moyen de mettre en œuvre mon exigence?
Vous pouvez ajouter le code suivant à votre template.php
if (strstr($form_id, 'webform_client_form')) {
$form['my_captcha_element'] = array(
'#type' => 'captcha',
'#captcha_type' => 'image_captcha/Image',
);
}
cela devrait être placé à l'intérieur du yourthemename_form_alter
Alternativement, vous pouvez mettre ce code dans un module personnalisé:
/**
* 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',
);
}
}
Source: https://drupal.org/node/255795
Pour que votre code personnalisé respecte les autorisations définies dans admin/people/permissions pour les personnes qui peuvent ignorer CAPTCHA, ajoutez ce qui suit à votre logique:
if ((strstr($form_id, 'webform_client_form')) && !(user_access('skip CAPTCHA'))) {
$form['my_captcha_element'] = array(
'#type' => 'captcha',
'#captcha_type' => 'default',
);
}