Jump to content

Ajout champs dans le formulaire d'inscription


Recommended Posts

Bonjour,

je suis en train de développer un module destiné à ajouter les champs nécessaires lors de l'inscription d'un nouveau client dans le cadre d'une boutique btob (Siret,TVA,...)

Le module est bien avancé, mais je bute sur la validation du formulaire.

Est-il possible de tester les nouveaux champs lors de l'envoi du formulaire ?

Le test est-il à inclure dans "public function hookCreateAccountForm($params)" pour empêcher l'envoi du formulaire ?

Merci d'avance

Rémi

Topic fusionnés [Edit par Zendik]

Link to comment
Share on other sites

Tout est possible, pour le design ça va être assez simple.
Mais il faudra que tu modifie la base de donné pour les clients.
Que tu affiche c'est variables dans le BackOffice, dans le FrontOffice si tu veux aussi.

Mais c'est un logiciel libre, c'est ça qui est bien ! Tu peux tout faire si tu t'y connais un peu...
Je ne peux pas trop t'aider car c'est quelque chose de long, je peux te donner les fichiers, les tables, le principe...

Mais à moins que quelqu'un l'est déjà fait et te file ses codes, tu vas devoir travailler ;)

Link to comment
Share on other sites

Merci pour ta réponse.

Je ne veux pas modifier le code de base de Prestashop. Le projet est trop jeune et je ne veux pas revivre les galères de mise à jour que j'ai pu avoir avec Os-Commerce.

J'ai créé un module pour ajouter mes champs, mais je n'arrive pas à voir comment ajouter le contrôle des champs avant l'envoi. Et comme je contrôle les données reçues, si elles ne sont pas au format attendu. Un message type "tentative de piratage" est affiché.

Saurais-tu où placer les contrôles avant l'envoi du formulaire. Si je les place dans la fonction hookCreateAccountForm, il ne me semble pas se déclencher...

Link to comment
Share on other sites

Félicitation pour ton module. Je l'ai déjà installé pour un client.

Je me suis basé sur ton module pour comprendre un peu le fonctionnement des modules prestashop.

Dans le module en cours de développement, j'ai ajouté mes actions dans toutes mes fonctions hookCreateAccountForm et hookCreateAccount

Il ne me reste plus qu'à ajouter le contrôle des champs avant l'envoi du formulaire. Et c'est ce point là que je n'arrive pas à résoudre. J'ai fait des essais dans la fonction hookCreateAccountForm, mais les tests ne semblent pas se déclencher.

Je voulais juste savoir si mes contrôles devait être ajouter dans la fonction hookCreateAccountForm et comment bloquer l'envoi du formulaire.

Link to comment
Share on other sites

Salut,

Ce que tu veux faire, est à l'heure actuelle (sur la 1.1) impossible à réaliser via un module. Tout simplement car PrestaShop n'a pas de hook qui permet de vérifier l'envoie des données (pas très intelligent... Ca viendra certainement).

Il te reste plus qu'à modifier le fichier "authentication.php" aux environs de la ligne 45 je pense. Normalement ce n'est rien d'énorme comme modification, et donc en cas de mise à jour, tu pourrais sans problème remettre ton code en quelques secondes ;).

Link to comment
Share on other sites

Merci pour ta réponse et les liens.

Je me suis créé un module pour l'ajout des champs et l'enregistrement dans la base.

Je n'ai ajouté que le contrôle avant envoi dans authentification.php

Peut-être que la version 1.2 me permettra d'intégrer ce contrôle dans mon module ;-)

Link to comment
Share on other sites

  • 3 months later...

Bonjour à tous,

Rémi est ce que tu as pu faire ce que tu voulais ?

Plutôt que de rajouter un champ, j'essaye (du moins je fais ce que je peux) pour rajouter un checkbox avec la mention : je certifie avoir 16 ans révolus (vente d'alcool) juste avant le checkbox newsletter dans le formulaire d'inscription.

J'ai voulu faire comme pour le checkbox "optin" (Recevez les offres spéciales de nos partenaires), du coup, j'ai repris la partie faisant référence à "optin" dans les fichiers suivants (cf en fichiers joints aussi) :
- themes/prestashop/authentication.tpl
- classes/Customer.php
- admin/tab/AdminCustomers.php


Ce qui donne comme modifs (en gros j'ai rajouté à chaque fois "age_16" à place de "optin" :

- themes/prestashop/authentication.tpl


<input type="checkbox" name="age_16" id="age_16" value="1">
{l s='Age more than 16'}
*



- classes/Customer.php

/** @var boolean 16 years old mandatory */
public         $age_16;



protected     $fieldsValidate = array('secure_key' => 'isMd5', 'lastname' => 'isName', 'firstname' => 'isName', 'email' => 'isEmail', 'passwd' => 'isPasswd',
        'id_gender' => 'isUnsignedId', 'birthday' => 'isBirthDate', 'age_16' => 'isBool', 'newsletter' => 'isBool', 'optin' => 'isBool', 'active' => 'isBool');



$fields['age_16'] = intval($this->age_16);



- admin/tab/AdminCustomers.php

$this->fieldsDisplay = array(
       'id_customer' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
       'id_gender' => array('title' => $this->l('Gender'), 'width' => 25, 'align' => 'center', 'icon' => array(1 => 'male.gif', 2 => 'female.gif', 'default' => 'unknown.gif'), 'orderby' => false, 'type' => 'select', 'select' => $genders, 'filter_key' => 'a!id_gender'),
       'lastname' => array('title' => $this->l('Last Name'), 'width' => 80),
       'firstname' => array('title' => $this->l('First name'), 'width' => 60),
       'email' => array('title' => $this->l('E-mail address'), 'width' => 120, 'maxlength' => 19),
       'age' => array('title' => $this->l('Age'), 'width' => 30, 'search' => false),
       'active' => array('title' => $this->l('Enabled'), 'width' => 25, 'align' => 'center', 'active' => 'status', 'type' => 'bool', 'orderby' => false),
       'age_16' => array('title' => $this->l('p16.'), 'width' => 25, 'align' => 'center', 'type' => 'bool', 'icon' => array(0 => 'disabled.gif', 1 => 'enabled.gif'), 'orderby' => false),
       'newsletter' => array('title' => $this->l('News.'), 'width' => 25, 'align' => 'center', 'type' => 'bool', 'icon' => array(0 => 'disabled.gif', 1 => 'enabled.gif'), 'orderby' => false),
       'optin' => array('title' => $this->l('Opt.'), 'width' => 25, 'align' => 'center', 'type' => 'bool', 'icon' => array(0 => 'disabled.gif', 1 => 'enabled.gif'), 'orderby' => false),
       'date_add' => array('title' => $this->l('Registration'), 'width' => 60, 'type' => 'date'),
       'connect' => array('title' => $this->l('Connection'), 'width' => 60, 'type' => 'datetime', 'search' => false));




'.$this->l('Age +16:').' '.($customer->age_16 ? '' : '').'

'.$this->l('Newsletter:').' '.($customer->newsletter ? '' : '').'

'.$this->l('Opt-in:').' '.($customer->optin ? '' : '').'

'.$this->l('Age:').' '.$customerStats['age'].' '.((!empty($customer->birthday['age'])) ? '('.Tools::displayDate($customer->birthday, intval($cookie->id_lang)).')' : $this->l('unknown')).'


'.$this->l('Last update:').' '.Tools::displayDate($customer->date_upd, intval($cookie->id_lang), true).'

'.$this->l('Status:').' '.($customer->active ? '' : '').'




Le pb est que dans le formulaire d'inscription, après validation, j'obtiens :
1. une erreur s'est produite pendant la création de votre compte


En allant dans le BO, j'ai bien les boutons radio (activié/désactivé) dans la fichier client, tout comme newsletter et OPT-IN mais si j'active le bouton radio (Age + 16) et que j'enregistre, j'obtiens le message :
une erreur s'est produite pendant la mise à jour customer (Unknown column 'age_16' in 'field list')


J'arrive pas à voir à quel moment ca bloque.
Si vous avez une idée, ca serait super cool, car je commence vraiment à tourner en rond.

Merci d'avance de votre aide

Customer.php

AdminCustomers.php

Link to comment
Share on other sites

  • 3 weeks later...

tu as plus simple:

tu as un champs qui se nomme information à la création du compte, ce champs tu le retraduit avec l'outil de traduction, en mettant d'inscrire la phrase "je cetifie avoir + de 16 ans" et tu rends ce champs obligatoire.

j'ai fait cela a la place de infomation je demande le numero de tva intracommunataire

ou plus simple encore tu rend la partie date de naissance obligatoire
a toi de voir lors d'une commande si le gars a 16 ans ou pas. par contre faut le rendre non modifiable a la consultation du client dans son compte pour pas que l'acheteur puisse changer sa date de naissance.

mais ca ne te couvre pas juridiquement, il faudrait pour que tu soit legalement couvert en cas de probleme juridique, que l'acheteur le justifie avec la fourniture d'une copie de sa CNI ou de son passeport. car la personne peut tres bien dire qu'il n'a jamais coché ou inscrit cela. la vente d'alcool est très règlementée

Link to comment
Share on other sites

Merci de ta réponse.
En effet, c'est une solution.

Finalement, j'ai conservé l'ajout du checkbox obligatoire "j'ai certifie avoir 16 ans révolus".
Pour que ca marche j'ai rajouté un champ "age_16" dans la table ps_customer.
Merci à ningu pour l'info !

Link to comment
Share on other sites

  • 3 years later...

tu as plus simple:

ou plus simple encore tu rend la partie date de naissance obligatoire .... par contre faut le rendre non modifiable a la consultation du client dans son compte pour pas que l'acheteur puisse changer sa date de naissance.

 

Comment faire cela car je ne sait pas le faire.

 

Merci d'avance.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...