Les formulaire de contacts sont de plus en plus soumis aux spams, ce qui devient assez agaçant…, malheureusement le formulaire de contact de prestashop ne fait pas exeption à la règle.

Voici donc un module qui vous permettra d’ajouter l’excellent « Recaptcha » de google à votre formulaire de contact prestashop.

captcha prestashop formulaire de contact

Pour commencer, ouvrez le fichier « contact-form.tpl » de votre dossier thème et saissez le code suivant :

1
2
3
4
5
6
{if $captcha }
<p>
<label for="captcha">{l s='Captcha'}</label>
<div style="float:left;margin-left: 0.7em;">{$captcha}</div>
</p>
{/if}

après les lignes suivantes :
( Je l’ai inséré après le champ message, mais c’est à adapter en fonction de l’endroit souhaité )

1
2
3
4
<p>
<label for="message">{l s='Message'}</label>
<textarea id="message" name="message" rows="15" cols="20" style="width:340px;height:220px">{if isset($message)}{$message|escape:'htmlall':'UTF-8'|stripslashes}{/if}</textarea>
</p>

Vous pouvez ensuite télécharger et installer le module.
Une fois le module installé, il sera nécessaire de récupérer des clés publiques et privées sur le site de recaptcha pour activer le module
http://www.google.com/recaptcha/whyrecaptcha

Vous pourrez télécharger ce module et consulter ses dernières mise à jour depuis la page Module (re)Captcha pour le formulaire de contact prestashop

(Note : 05/05/2014 : Ce fonctionnement n’est plus d’actualité , la vérification est fait en ajax )
Le fonctionnement du module en lui même est relativement simple, toute la logique étant dans la fonction « hookHeader ».
Les vérifications du captcha utilisent la librairie fournie par google.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
       public function hookHeader($params) {
 
            //Récupération de la page//controller courant
            $contact_form_controller = false;
            $page_name = false;
 
            //Version 1.5
            if (_PS_VERSION_ > '1.5') {
                if ( $this->context->controller instanceof ContactController )
                    $contact_form_controller = true;
            }
            //Versions 1.4
            else {
                /* Version >= 1.4.9 */
                if ( version_compare(_PS_VERSION_, '1.4.9.0', '>=') )
                    $page_name = $this->context->smarty->getTemplateVars('page_name');
                else      
                /* Version > 1.4.9*/
                $page_name = $this->context->smarty->get_template_vars('page_name');
            }
 
            if ( $page_name == 'contact-form' || $contact_form_controller ) {
 
                //Génération du template
                require_once(dirname(__FILE__).'/lib/recaptchalib.php');
                $publickey = Configuration::get('CAPTCHA_PUBLIC_KEY');
 
                //Si soumission du formulaire :                
                if (Tools::isSubmit('submitMessage')){
 
                    $captcha_check = recaptcha_check_answer(Configuration::get('CAPTCHA_PRIVATE_KEY'), $_SERVER["REMOTE_ADDR"], Tools::getValue('recaptcha_challenge_field'), Tools::getValue('recaptcha_response_field'));                        
                    if ($captcha_check->is_valid != 1)
                    {
                        Tools::redirect('contact-form.php?recaptchaError=1');
                    }
                }
 
                //Assignation du code recaptcha
                $this->context->smarty->assign('captcha',recaptcha_get_html($publickey));
 
                //Si message d'erreur
                if ( Tools::getValue('recaptchaError') == 1) {
 
                    //Assignation de l'erreur au template
                    $this->context->smarty->assign('errors',array($this->l('the captcha code is wrong')));
                    $errorBlock = trim(preg_replace("#\n#","",$this->context->smarty->fetch(_PS_THEME_DIR_.'errors.tpl')));
 
                    //Placement du block dans la page
                    return '<script type="text/javascript">
                    $(document).ready(function(){
                        $("form.std").before(\''.$errorBlock.'\');
                    });
                    </script>';
                }
 
            }
        }

Nouvelle version du module avec vérification ajax du code du captcha disponible : plus de détails