Jump to content

[TUTORIAL] DEVFOREVER - Ajouter un champ obligatoire au formulaire d’inscription


Recommended Posts

"AJOUTER UN CHAMP OBLIGATOIRE AU FORMULAIRE D'INSCRIPTION" :

Editons le fichier authentication.tpl disponible dans le dossier de votre thème, nous allons ajouter un champ obligatoire où le client devra saisir sont numéro SIRET. Le numéro de SIRET va être enregistré dans la table customer de la base de donnée et sera donc rattaché au client et non à une adresse.
Nous devons premièrement modifier ce fichier pour ajouter la zone de saisie destinée au client, on va intercaler entre 2 champs existants le code suivant :


{l s='SIRET'}
   <input type="text" class="text" id="siret" name="siret" value="{if isset($smarty.post.siret)}{$smarty.post.siret}{/if}" />
*



A partir de maintenant le client aura une zone SIRET à remplir dans son formulaire d'inscription.

Editons le fichier Customer.php du dossier classes pour réaliser les modifications d'enregistrement de données, on va ajouter le champ SIRET comme champ et comme obligatoire, dans la liste des déclarations de variable, on va ajouter :

public         $siret;



on le rend obligatoire :

protected     $fieldsRequired = array('lastname', 'passwd', 'firstname', 'email', 'siret');



et on définit les paramètres de taille et de type :

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



Dans la fonction getFields(), on va ajouter la récupération de la donnée SIRET :

$fields['siret'] = pSQL($this->siret);



Maintenant nous allons ajouter un champ nommé "siret" dans la table customer de la base de donnée type VARCHAR taille 128 NOT NULL.

REQUÊTE SQL :
ALTER TABLE prefix_customer ADD `siret` VARCHAR(128) NOT NULL



remplacer prefix par le préfixe que vous avez choisi lors de l’installation de Prestashop.

Le client devra donc saisir obligatoirement le numéro de SIRET pour pouvoir créer un compte.

Editons le fichier identity.tpl disponible dans le dossier de votre thème, nous allons ajouter le champ SIRET pour que le client puisse visualiser et/ou éditer son numéro de SIRET dans son compte, pour ce faire, on va ajouter une zone de saisie dans le formulaire :


{l s='SIRET'}*
   <input type="text" name="siret" id="siret" value="{$smarty.post.siret}" />



Le client pourra à l'aide de ce code, visualiser et modifier son numéro de SIRET, si vous préférez simplement le rendre visualisable, ajoutez READONLY sur le INPUT.

Il peut être judicieux de pouvoir visualiser et/ou modifier cette information en BackOffice, on va donc faire apparaître l'information en BackOffice:
Editons le fichier AdminCustomers.php disponible dans le dossier /admin/tabs, on va modifier le code de la manière suivante pour faire apparaître sous la dernière date de visite le numéro de SIRET, dans la fonction viewcustomer() :

id.'&token;='.$this->token.'">
'.$customer->firstname.' '.$customer->lastname.'
id_gender == 2 ? 'female' : ($customer->id_gender == 1 ? 'male' : 'unknown')).'.gif" style="margin-bottom: 5px" />

email.'" style="text-decoration: underline; color: blue">'.$customer->email.'


   '.$this->l('ID:').' '.sprintf('d', $customer->id).'

   '.$this->l('Registration date:').' '.Tools::displayDate($customer->date_add, intval($cookie->id_lang), true).'

   '.$this->l('Last visit:').' '.($customerStats['last_visit'] ? Tools::displayDate($customerStats['last_visit'], intval($cookie->id_lang), true) : $this->l('never')).'

   '.$this->l('SIRET :').' '.$customer->siret.'



Vous voyez la ligne SIRET en bas du FIELDSET.

Dans la fonction DisplayForm(), on va ajouter la ligne qui va nous permettre d'éditer le code SIRET si besoin, donc la modification suivante est à insérer après un champ existant :

'.$this->l('SIRET:').' 

   <input type="text" size="33" name="siret" value="'.$this->getFieldValue($obj, 'siret').'" /> *



Maintenant on peut éditer le numéro de SIRET du client et le modifier.

Voilà, j'espère que ce TUTORIAL vous paraît clair, et qu'il pourra vous aider.....
;-)

ATTENTION : Tous les clients déjà enregistrés ne pourront plus accéder à leur fiche compte car il n'avait pas de code SIRET avant la mise en place de cette modification, pour leur affecter un code SIRET "bidon" en attendant un remplissage correct, il est nécessaire de lancer cette requête :

REQUÊTE SQL :
UPDATE prefix_customer SET siret= "0123456789" WHERE siret="" OR ISNULL(siret) 



remplacer prefix par le préfixe que vous avez choisi lors de l’installation de Prestashop.

  • Like 3
Link to comment
Share on other sites

  • 2 weeks later...

Dans la fonction DisplayForm(), on va ajouter la ligne qui va nous permettre d'éditer le code SIRET si besoin, donc la modification suivante est à insérer après un champ existant :

'.$this->l('SIRET:').' 

   <input type="text" size="33" name="siret" value="'.$this->getFieldValue($obj, 'siret').'" /> *



Maintenant on peut éditer le numéro de SIRET du client et le modifier.



Comment ajouter une ligne (dans cette fonction Display Form) qui fait appel à une table différente (ex: afficher le champ société qui est sur la table adress et non customer)?
Comment appeler cette table différente? Avec quel code?
Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,

Je viens vers vous car je viens de réaliser ce tutoriel !
Quand je valide j'ai un message "tentative de piratage champs siret empty"...

Aprés quelques recherches, je me suis rendu compte que l'inscription est bien rentré en base de données.
Y a pas de problème !

Seulement le champs SIRET est vide.
Ce qui provoque le message d'erreur...!


Si je renseigne ce champs à la main, et que je rafraichie la page l'erreur disparaît !


Savez-vous pourquoi la valeur passé en base est vide ? :/
Comment est-ce que je peux faire pour résoudre mon soucis ?


D'avance merci
++ :)

Link to comment
Share on other sites

Bonjour

J'ai moi aussi suivi ce tuto à la lettre.
Pas d'erreur en ce qui me concerne affichée sur le site type "Tentative de piratage".
Le client est bien enregistré dans la base de donnée, mais le champ SIRET reste vide !!

Peut être est-ce dû au fait que je n'ai pas pu ajouter le champ à la table avec la requête SQL car cela me générait une erreur : #1064 - You have an error in your SQL syntax;
Du coup, j'ai créé le champ à la main directement dans phpmyadmin.

Une idée ?

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour BVince,

Moi je suis super nulle dans ce genre de code donc faut que je sois super certaine de mon affaire avant de jouer dans tout ça.

J'ai besoin d'ajouter le champs Compagnie lors de l'inscription mais il ne doit pas être obligatoire. Le nom de la compagnie doit apparaître sur la facture dans le champs Facturation comme on le voit pour le champs Livraison.

Si je suis à la lettre ton tuto en remplaçant siret par compagnie, est-ce qu'il me suffit de ne pas mettre le protected dans le code pour que ce champs ne soit pas obligatoire?


Merci de ton aide

Link to comment
Share on other sites

Bonjour BVince,

Moi je suis super nulle dans ce genre de code donc faut que je sois super certaine de mon affaire avant de jouer dans tout ça.

J'ai besoin d'ajouter le champs Compagnie lors de l'inscription mais il ne doit pas être obligatoire. Le nom de la compagnie doit apparaître sur la facture dans le champs Facturation comme on le voit pour le champs Livraison.

Si je suis à la lettre ton tuto en remplaçant siret par compagnie, est-ce qu'il me suffit de ne pas mettre le protected dans le code pour que ce champs ne soit pas obligatoire?


Merci de ton aide


Bonjour,

Pour ajouter un champ et ne pas le rendre obligatoire, il suffit de ne pas l'ajouter dans

protected     $fieldsRequired



par contre pour l'affichage sur les factures, il va falloir modifier autre chose dans le fichier PDF.php du dossier "classes"

Link to comment
Share on other sites

Merci pour ce jolie petit Tuto BVince !

Seule petite remarque, tu as omis le TABLE de la fonction ALTER TABLE =) Rien de bien méchant mais si on veut que ton tuto soit parfait =P

Maintenant nous allons ajouter un champ nommé “siret” dans la table customer de la base de donnée type VARCHAR taille 128 NOT NULL.

Remplacer :
REQUÊTE SQL :
ALTER prefix_customer ADD `siret` VARCHAR(128) NOT NULL 



Par :

REQUÊTE SQL :
ALTER TABLE prefix_customer ADD `siret` VARCHAR(128) NOT NULL 




Encore merci pour ce tuto ^.^
Link to comment
Share on other sites

Ouin ben pour moi cela n'a pas fonctionné.

J'avais un message d'erreur lors de la création du compte mais aucune idée qu'elle était l'erreur. J'ai tout enlevé pour revenir comme avant.

Cette erreur est venue une fois que j'ai ajouté la requête dans la base et ajouté les codes dans la page classes/Customer.php

Comment faites vous pour faire des tests car moi j'ai épuisé ma banque d'adresse de courriel pour faire des tests et je ne peux essayer à nouveau.



Merci de votre aide

Link to comment
Share on other sites

Merci pour ce jolie petit Tuto BVince !

Seule petite remarque, tu as omis le TABLE de la fonction ALTER TABLE =) Rien de bien méchant mais si on veut que ton tuto soit parfait =P

Maintenant nous allons ajouter un champ nommé “siret” dans la table customer de la base de donnée type VARCHAR taille 128 NOT NULL.

Remplacer :
REQUÊTE SQL :
ALTER prefix_customer ADD `siret` VARCHAR(128) NOT NULL 



Par :

REQUÊTE SQL :
ALTER TABLE prefix_customer ADD `siret` VARCHAR(128) NOT NULL 




Encore merci pour ce tuto ^.^



Il faudrait dire aussi pour les nuls comme moi qu'il ne faut pas écrire REQUÊTE SQL : mais seulement le code.
Link to comment
Share on other sites

Je reprends un peu le code donné par BVince =)

Dans le fichier AdminCustomer.php disponible dans le dossier /admin/tabs :

Remplacer :

'.$this->l('SIRET:').' 

   <input type="text" size="33" name="siret" value="'.$this->getFieldValue($obj, 'siret').'" /> *
 



Par :

'.$this->l('SIRET:').' 

 <input type="text" size="33" name="siret" value="'.htmlentities($this->getFieldValue($obj, 'siret'), ENT_COMPAT, 'UTF-8').'" />
 



Les problèmes d'enregistrements dans la base de données devraient être réglés. (en tout cas ils le sont pour moi)

Pour France :
Tu peux même mettre ce code là pour ta compagny afin d'éviter tout caractère spaciaux :

'.$this->l('First name:').' 

                   <input type="text" size="33" name="compagnie" value="'.htmlentities($this->getFieldValue($obj, 'compagnie'), ENT_COMPAT, 'UTF-8').'" />
'.$this->l('Forbidden characters:').' 0-9!<>,;?=+()@#"�{}_$%: 



Pour les adresses e-mails test, j'en utilise des bidons du genre "[email protected]" "[email protected]" etc.

En espérant que ça puisse t'aider ^.^

Link to comment
Share on other sites

Ah et pour les Requetes SQL... On ne peut pas vraiment appeler ça du code mais plutôt une commande, ou plus précisément une requete :-)

Pour s'attaquer à ce genre de chose j'estime qu'il faut avoir quelques notions dans le domaine tout de même. Des cours très simples sont disponibles sur internet.

Quoi qu'il en soit, cette requette :

ALTER TABLE prefix_customer ADD `siret` VARCHAR(128) NOT NULL



Doit être inséré dans la base de données, tu peux y accéder de différentes façon suivant l'hébergeur où tu es =)

Link to comment
Share on other sites

Bonjour,

Je suis entrain de reprendre le tuto au début. Tout ce que je veux est d'avoir le champs Compagnie lors de l'inscription et qui ne soit pas obligatoire. Je veux également que le nom de la compagnie soit visible sur la facture du client sous Facturation.

Dans authentification.tpl j'ai mis ça

    {l s='Your personal information'}


{l s='Company'}
               <input type="text" class="text" id="company" name="company" value="{if isset($smarty.post.company)}{$smarty.post.company}{/if}" />



Dans Classes/Customer.php j'ai mis ça juste en dessous de public $secure_key


   /** @var string Company (optional) */
   public         $company;



J'ai mis ça aussi dans la même sous secure_jey

$fields['company'] = pSQL($this->company);




En ce qui concerne cette étape là je ne sais pas trop car mon champs compagnie n'est pas obligatoire donc que dois-je faire?

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





Merci de votre aide

Link to comment
Share on other sites

Je reprends un peu le code donné par BVince =)

Dans le fichier AdminCustomer.php disponible dans le dossier /admin/tabs :

Remplacer :
'.$this->l('SIRET:').' 

   <input type="text" size="33" name="siret" value="'.$this->getFieldValue($obj, 'siret').'" /> *
 



Par :

'.$this->l('SIRET:').' 

 <input type="text" size="33" name="siret" value="'.htmlentities($this->getFieldValue($obj, 'siret'), ENT_COMPAT, 'UTF-8').'" />
 



Les problèmes d'enregistrements dans la base de données devraient être réglés. (en tout cas ils le sont pour moi)

Pour France :
Tu peux même mettre ce code là pour ta compagny afin d'éviter tout caractère spaciaux :

'.$this->l('First name:').' 

                   <input type="text" size="33" name="compagnie" value="'.htmlentities($this->getFieldValue($obj, 'compagnie'), ENT_COMPAT, 'UTF-8').'" />
'.$this->l('Forbidden characters:').' 0-9!<>,;?=+()@#"�{}_$%: 



Pour les adresses e-mails test, j'en utilise des bidons du genre "[email protected]" "[email protected]" etc.

En espérant que ça puisse t'aider ^.^




Bonjour Jumk

Ces bouts de code c'est pour le back office seulement et/ou pour le front office?


Excuse moi si je n'ai pas pris les bons mots pour d'écrire la requête mais comme je l'ai dit, ce n'est pas une partie sur laquelle je m'y connais.


Merci de ton aide et de ton astuce pour les adresses de courriel.
Link to comment
Share on other sites

Je vais essayer de te répondre dans l'ordre.

En ce qui concerne cette étape là je ne sais pas trop car mon champs compagnie n’est pas obligatoire donc que dois-je faire?

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



Merci de votre aide



Oui tu rajoutes ce code même dans le cas où tes champs ne sont pas obligatoires. De la manière suivante :
protected     $fieldsSize = array('lastname' => 32, 'passwd' => 32, 'firstname' => 32, 'email' => 128, 'siret' => 128, 'compagnie' => 128);
protected     $fieldsValidate = array('secure_key' => 'isMd5', 'lastname' => 'isName', 'firstname' => 'isName', 'email' => 'isEmail', 'passwd' => 'isPasswd',
        'id_gender' => 'isUnsignedId', 'birthday' => 'isBirthDate', 'newsletter' => 'isBool', 'optin' => 'isBool', 'active' => 'isBool', 'siret' => 'isGenericName', 'compagnie' => 'isGenericName');



Ces bouts de code c’est pour le back office seulement et/ou pour le front office?

Excuse moi si je n’ai pas pris les bons mots pour d‘écrire la requête mais comme je l’ai dit, ce n’est pas une partie sur laquelle je m’y connais.

Merci de ton aide et de ton astuce pour les adresses de courriel.

Je ne comprends pas encore totalement le fonctionnement du moteur Prestashop mais les bouts de code sont apparemment pour le Front et le Back office oui. Dans mon cas, cela permet d'afficher à mon client son numéro SIRET dans sa page de récapitulatif de ses informations personnelles et d'enregistrer les données.

J'espère t'éclairer un peu dans tout ça.

Bonne nuit =)
Link to comment
Share on other sites

J'ai toujours le même problème :-( Une erreur s'est produit lors de la création de votre compte

Le problème c'est que je ne sais pas c'est quoi l'erreur.

Récapitulatif de ce que j'ai fait


Dans authentification.tpl j'ai mis ça

{l s='Your personal information'}


{l s='Company'}
               <input type="text" class="text" id="company" name="company" value="{if isset($smarty.post.company)}{$smarty.post.company}{/if}" />
 




Dans Classes/Customer.php j’ai mis ça juste en dessous de public $secure_key

/** @var string Company (optional) */
   public         $company;



J’ai mis ça aussi dans la même page sous secure_jey

$fields['company'] = pSQL($this->company); 




Et ça toujours dans la même page (j'ai mis en rouge ici le petit bout ajouté)

     protected     $fieldsRequired = array('lastname', 'passwd', 'firstname', 'email');
    protected     $fieldsSize = array('lastname' => 32, 'passwd' => 32, 'firstname' => 32, 'email' => 128, [color=red]'compagnie' => 128);[/color]
    protected     $fieldsValidate = array('secure_key' => 'isMd5', 'lastname' => 'isName', 'firstname' => 'isName', 'email' => 'isEmail', 'passwd' => 'isPasswd',
        'id_gender' => 'isUnsignedId', 'birthday' => 'isBirthDate', 'newsletter' => 'isBool', 'optin' => 'isBool', 'active' => 'isBool', [color=red]'compagnie' => 'isGenericName');[/color]




Et dans AdminCustomer.php que l'on retrouve dans admin/tabs j'ai mis ça juste au dessus de la ligne pour le label Last name. J'ai enlevé ce bout de code et refait un test et j'ai toujours l'erreur.

'.$this->l('Company:').' 

                   <input type="text" size="33" name="compagnie" value="'.htmlentities($this->getFieldValue($obj, 'compagnie'), ENT_COMPAT, 'UTF-8').'" />
'.$this->l('Forbidden characters:').' 0-9!<>,;?=+()@#"�{}_$%: 
 




Ma requête SQL a été ajouté avec succès

ALTER TABLE ps_customer ADD `company` VARCHAR(128) NOT NULL



Si j'enlève ce que j'ai ajouté dans Customer.php je n'ai plus l'erreur d'enregistrement sauf que le nom de la compagnie ne reste pas affiché.


Comment faire pour trouver où est l'erreur? Je ne connais rien dans ce style de code. :-(

Merci de votre aide

Link to comment
Share on other sites

Essaie ça tout simplement dans AdminCustomer.php :

'.$this->l('Compagnie :').' 

                   <input type="text" size="33" name="siret" value="'.htmlentities($this->getFieldValue($obj, 'compagnie'), ENT_COMPAT, 'UTF-8').'" />
 



Mais BVince à raison, si tu veux simplement un champ société... Il existe déjà =)

Link to comment
Share on other sites

Bonjour BVince et Jumk


J'ajoute ce champs car, pour les clients qui ont une compagnie, le nom de la compagnie doit figurer sur la facture sous Facturation. Présentement le nom de la compagnie apparaît seulement sous Livraison.


Merci de votre aide

Link to comment
Share on other sites

Mais si le nom de la compagnie pour la facturation diffère du nom de la compagnie pour la livraison il faut que le client puisse modifier ça. Le champs Facturation ne doit pas prendre automatiquement le nom de la compagnie qui est sous Livraison.

C'est pour ça que je pensais qu'il me fallait ajouter un champs compagnie pour l'inscription car je pense que les informations personnelles sont celles qui sont ajoutées sous Facturation dans la facture.


Si je n'ai pas besoin d'ajouter un champs pour la compagnie, que dois-je changer dans le PDF.php pour ajouter le nom de la compagnie sous Facturation?


Merci de ton aide

Link to comment
Share on other sites

Dans Prestashop, on peut créer plusieurs adresses pour un même compte client, pour chacune d'entre elles, on peut mettre un nom de société différent, et lors de la validation de la commande, on peut choisir quelle adresse sera celle de facturation et celle de livraison, ensuite ces informations apparaissent correctement sur la facture...un nom de société sous FACTURATION et un autre sous LIVRAISON, je ne vois pas ce que tu as besoin de modifier puisque c'est intégré à Prestashop (testé sur une 1.2.5 et 1.3) ?????

Link to comment
Share on other sites

Tu as raison. Le client peut choisir différentes adresses pour la livraison et changer le nom de la compagnie.


Ce qui apparaît sous Facturation se sont les informations personnelles et comme il n'y a pas de champs lors de l'inscription pour mettre le nom de la compagnie celle-ci n'apparait pas sur la facture. Je peux te montrer une capture d'écran si tu ne me crois pas :-))

Il faut que le nom de la compagnie apparaisse sous Facturation donc que faut-il ajouter et à quel endroit pour que le nom de la compagnie apparaisse sous Facturation sans pour autant enlever le nom et prénom du client?


Merci de ton aide

Link to comment
Share on other sites

Bon,
je reprends, comme il faut choisir 1 adresse pour la facturation et 1 adresse pour la livraison, les noms des sociétés correspondantes apparaissent en dessous de chacun d'entre eux...Maintenant si tu préfères camper sur tes positions et passer des heures à refaire quelque chose qui existe déjà, je n'y vois pas d'inconvénients....

Link to comment
Share on other sites

Bonjour BVince

C'est une de mes clientes qui m'a fait remarqué ceci sur sa facture (voir pièce jointe) et je ne suis pas allée voir les autres factures précédentes provenant de d'autres compagnies.

Je viens de retourner voir toutes les factures précédentes des autres clients qui ont des compagnies et effectivement ils ont le nom de leur compagnie sous Facturation. Donc, millessssssssss excusessssssssssss mais pourquoi sur la facture en pièce jointe le nom de la compagnie n'apparait pas sous Facturation ? Pourtant il y a bien un nom de compagnie pour la livraison.

Perso, c'est sur cette facture que je me suis fiée et décidé d'ajouter le nom de la compagnie pour qu'il apparaisse sous Facturation. J'ai cru pendant quelques instants que je l'avais rêvé ou que je devenais folle suite à tes propos. Ouf! Une chance que j'ai cette preuve sinon... je m'en allais à l'hosto pour me faire enfermer! :-))


Merci de ton aide

27187_JeSr5XaJ92NTUImkEc3G_t

Link to comment
Share on other sites

Bonjour,
Le champ société n'est pas un champ obligatoire, je pense simplement que ton client n'avait pas de nom de société au moment ou il a fait sa commande, il est même possible qu'il n'en ait toujours pas, peut être pourrais tu modifier le code pour rendre obligatoire la saisie du nom de la société...

Link to comment
Share on other sites

Bonjour BVince

Bien sûr que le client avait un nom de société. C'est La marguerite fruitée et on le voit sous Livraison.

Je ne peux pas rendre ce champs obligatoire car j'ai des clients qui n'ont pas de société. Je vends principalement à "monsieur madame tout le monde" mais j'ai des clients qui ont une compagnie qui viennent acheter chez moi car j'ai des produits que l'on ne retrouve pas ici au Québec et même au Canada.


Je vais surveiller de plus près les autres commandes en provenance de compagnie afin de voir si le problème se reproduit c'est-à-dire que le nom de la compagnie ne s'affiche pas sous Facturation.


Merci de ton aide

Link to comment
Share on other sites

  • 2 months later...
"AJOUTER UN CHAMP OBLIGATOIRE AU FORMULAIRE D'INSCRIPTION" :

Editons le fichier authentication.tpl disponible dans le dossier de votre thème, nous allons ajouter un champ obligatoire où le client devra saisir sont numéro SIRET. Le numéro de SIRET va être enregistré dans la table customer de la base de donnée et sera donc rattaché au client et non à une adresse.
Nous devons premièrement modifier ce fichier pour ajouter la zone de saisie destinée au client, on va intercaler entre 2 champs existants le code suivant :


{l s='SIRET'}
   <input type="text" class="text" id="siret" name="siret" value="{if isset($smarty.post.siret)}{$smarty.post.siret}{/if}" />
*


A partir de maintenant le client aura une zone SIRET à remplir dans son formulaire d'inscription.



Comment faire cependant pour rendre cet enregistrement de "Siret" dans une autre table que "prefixe_customer" ?
Par exemple sous la table "prefixe_societe".

J'ai vu que quelqu'un a posé la question sur ce topic, mais personne n'ayant repondu , je me permet de relancer cette demande.
Link to comment
Share on other sites

  • 1 month later...

Petite précision pour rendre le champs obligatoire avec un contrôle de sa saisie et un retour erreur, il faut aussi ajouter le champs dans l'objet.
Exemple avec le customer:
/classes/Customer.php
protected $fieldsRequired = array('lastname', 'passwd', 'firstname', 'email', 'votrenouveauchamps');

Link to comment
Share on other sites

Airclic : L'information du $fieldsRequired est dans le tutorial.
Ricky6DK : Il faudrait que la table societe existe, mais on peut trés bien imaginé d'insérer les informations dans la table address, dans ce cas, il faut suivre la même logique.

Link to comment
Share on other sites

J'ai instalez hier la 1.4 alpha, ils ont prévu pour le Numéro tva au moment du paiement.
cela serait bien qu'il pense a mettre à l'inscription le champs TVA ou siret non obligatoire ou avec une option pour rendre les champs obligatoire.
j'ai bien voulu mettre dans un poste pour proposer cette option d'origine dans la version final 1.4 mais pas trouver le bon poste sauf en anglais.

Link to comment
Share on other sites

Merci pour le tuto, exactement ce que je cherchais.
Par contre j'ai bataillé à cause du module hide price. Pour que ca marche il faut désinstaller ce module, remettre les fichiers d'origine de Prestashop (ceux qui sont à modifier dans ce tuto identity.tpl, Admincustumers...etc), faire les modifs de ce tuto et reinstaller Hideprice et ca marche ...
Ca peut servir à quelqu'un pour éviter la galère...

Link to comment
Share on other sites

  • 3 weeks later...

Bonjour,

J'avais déjà fait la procédure pour les SIRET et TVA sans problème.

Là, je veux créer un troisième champ et cela ne marche pas.

Les deucx parties back office, pas de souci.

Mais les deux tpl, rien à faire, les changements ne sont pas pris en compte.

Est ce du à un problème de version, un problème de module qui gène ?

J'ai fait un essai en changement l'intitulé de SIRET en SIRETTTT et même cela n'est pas apparu.

J'ai pensé que je ne transférait pas dans le bon thème, mais je n'en ai qu'un.



{l s='SOCIETE'}

           <input type="text" class="text" id="societe" name="societe" value="{if isset($smarty.post.societe)}{$smarty.post.societe}{/if}">
*



Je flanche !
Link to comment
Share on other sites

Bonjour,

Merci bien.

La suite, va compliquer un peu les choses car je vais essayer de rajouter une série de boutons ratio à saisie obligatoire et une série de case à cocher avec choix multiple.

Les tpl ne sont pas durs à faire mais la retransmission des informations en back ne me parait pas évidente.

En BtoB, il est fort pratique pour l'enregistreur d'un nouveau compte d'avoir les informations de statut juridique et de ou des activité commerciales du client. Cela peut représenter 1/4 heure par inscription de gagné.

Je vais donc m'acharner à cette tâche aujourd'hui et si cela marche, j'en ferai sûrement un tuto.

Link to comment
Share on other sites

  • 4 weeks later...

Bonjour,
Tout d'abord merci pour le tutoriel.
Je l'ai suivi pour ajouter 4 champs sur ma page d'inscription.
Pour le champ checkbox et les 2 champs textes, tout marche bien par contre pour le champ de type date il n'est pas enregistré en base de données.
Je pense que le problème vient du tpl peut être de cette partie:


-
               {foreach from=$years item=year}
{$year|escape:'htmlall':'UTF-8'}  
               {/foreach}


J'ai défini f_days, f_months, f_years ainsi que la date correspondante dans Customer.php
Est ce que quelqu'un aurait une piste à me donner?
Merci

Link to comment
Share on other sites

Désolé pour le dérangement, en fait j'avais oublié de définir le post dans le authentication.php.

$customer->f_birthday = (empty($_POST['f_years']) ? '' : intval($_POST['f_years']).'-'.intval($_POST['f_months']).'-'.intval($_POST['f_days']));

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour et merci beaucoup de ce tutorial qui m'en a appris beaucoup dans la gestion des fichers "clients" sur prestashop.
Malheureusement je rencontre un problème en effet :

Je voudrais rendre obligatoire le champ qui apparait quand "Requiert un numéro d'identification fiscale" ou la variable 'dni'
cela SEULEMENT si le client y est soumis (client étranger défini par choix du pays = paye en HT = n° de TVA intra)

Je n'arrive qu'à le rendre obligatoire en rajoutant 'dni' dans Customers.php/protected files que pour TOUS les clients y compris les français qui n'ont pas à fournir ce n°
J'ai juste réussi à ajouter la petite étoile de champs requis mais si ils ne mettent rien ça valide quand même.

J'espère avoir été clair?!

Si quelqu'un a la solution...
Merci beaucoup d'avance!

Link to comment
Share on other sites

  • 1 month later...

Bonjour,

Bon finalement je me suis lancé en test local. Vraiment super ton tuto.
Donc pour ceux qui veulent ajouter un champ sur une adresse il faut suivre le tuto avec quelques modifications :

-Dans le fichier adress.tpl il faut ajouter une valeur pour permettre de visualiser l'entrée quand on revient sur l'adresse donc pas besoin de modifier le fichier identity.tpl :

{else}{$address->email|escape:'htmlall':'UTF-8'}


comme ceci :

<input type="text" class="text" id="email" name="email" value="{if isset($smarty.post.email)}{$smarty.post.email}{else}{$address->email|escape:'htmlall':'UTF-8'}{/if}" />



- Il faut éditer le fichier Adress.php et non pas Customer.php

- la table à incrémenter c'est prefixe_address au lieu de prefixe_customer


Réaliser sur prestashop 1.3.6

Link to comment
Share on other sites

Idéalement tu utilises un outil Diff/Merge pour réintégrer tes modifs avant chaque Maj.

Pour ça tortoise svn est top, conjointement au repository de prestashop :

tu remplaces le fichier à jour du dossier svn par celui modifié, puis un clic droit dessus et Tortoise SVN -> Diff.

Il est alors super facile de réintégrer les modifications faites , car elles sont mises en valeur par l'outil.

Link to comment
Share on other sites

  • 1 month later...

Bonjour,

Bravo pour le tuto, ces ressources sont tellement rares qu'on les apprècie à leur juste valeur quand on tombe dessus !

Pour ma part j'ai réussi à rajouter beaucoup de champ dans plusieurs tables de la BDD en suivant les étapes à la lettre.

Mon problème aujourd'hui est que j'ai aussi rajouté des champs de type select et je n'arrive pas à récupérer leur valeur pour l'insérer en BDD.

Quelle est la syntaxe à utiliser dans ce cas-là?

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,

J'ai revérifié plusieurs fois les manips, et j'ai toujours le même problème.

mon champ TVA dans la BdD reste désespérément vide :(

Aucune erreur lors de la création du compte client, le champ est bien obligatoire, le compte se créé, mais TVA est vide (donc lors de la suppression de la fiche client, j'ai droit à "hack attempt ...")

je ne vois vraiment pas ou ça cloche !

EDIT : ce qui est étrange c'est lorsque je modifie le Numero de TVA du client dans le back-office, ça fonctionne

EDIT 2 : Lors de l'inscription, le champ TVA est bien vérifié !

Est-ce cette ligne qui pose problème

$fields['ntva'] = pSQL($this->ntva); 



(j'ai bien remplacer "siret" par "ntva" partout !)

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour à tous,

Je ne sais pas pourquoi mais le champ SIRET n'apparaît pas dans le formulaire d'inscription ?
J'ai bien vidé le cache mais rien.
Et quand je veux valider mon inscription j'ai bien "SIRET obligatoire" dans les erreurs ?
Est-ce que quelqu'un sait d'où cela peut venir ?

Je tiens à préciser que j'utilise le template "prestashop 1.4 alternative". Et aussi que le champ apparaît correctement dans le backoffice ...

Merci de votre aide.

EDIT :
C'est bon, je ne savais pas qu'il fallait aller supprimer les fichiers dans prestashop/tool/smarty/compile/
Je vidais seulement le cache à partir du navigateur.
Merci encore pour ce super tuto !

Link to comment
Share on other sites

  • 4 weeks later...

Bonjour,

Je viens de mettre en place ce tuto, mais le champs n'apparaît pas dans le formulaire d'inscription, je l'ai placé juste en dessous du camps "Société". J'utilise la version 1.4, thème par défaut.

J'ai vider tout le cache possible, /compile, /cache de smarty, celui de mon navigateur. J'ai aussi forcer la compilation et désactivé le cache dans les performance du BO.
Je ne sais plus quoi faire, quelqu'un à une idée ?

Merci

Link to comment
Share on other sites

bonjour

je suis dans l impasse j'ai suivi le tuto 3 fois au pied de la lettre

mais quand je veux faire l'inscription je tombe sur page blanche et rien se passe après.

un petite aide a se sujet?

en effet je veux mettre un champ domaine (nom de domaine)

Version de Prestashop: 1.4.2.5

Link to comment
Share on other sites

Bonjour à tous.
Je rencontre ce genre d'erreur dans le back office de l'onglet client: "Parse error: syntax error, unexpected '=' in /htdocs/public/www/admin34/tabs/AdminCustomers.php on line 164".

J'ai respecté toutes les marches à suivre mais je ne vois pas comment résoudre ce problème.

Merci infiniment pour votre aide.

Voici le partie du code qui pose problème:



'.$customer->firstname.' '.$customer->lastname.'
id_gender == 2 ? 'female' : ($customer->id_gender == 1 ? 'male' : 'unknown')).'.gif" style="margin-bottom: 5px" />


email.'" style="text-decoration: underline; color: blue">'.$customer->email.'

 

Link to comment
Share on other sites

  • 2 weeks later...

bonjour, j'ai suivi ce tuto a la lettre mais rien, le champs ajouter ne saffiche pas. j'utilise prestashop 1.4.2.5. Quand je fini de remplir les champs pendant l'inscription, je recois une erreur comme quoi le champ N° Compte Client (champs ajouté) n'est pas complété. D'ou peut venir le probléme. Pourquoi ca saffiche pas?

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...
Bonjour,

Bon finalement je me suis lancé en test local. Vraiment super ton tuto.
Donc pour ceux qui veulent ajouter un champ sur une adresse il faut suivre le tuto avec quelques modifications :

-Dans le fichier adress.tpl il faut ajouter une valeur pour permettre de visualiser l'entrée quand on revient sur l'adresse donc pas besoin de modifier le fichier identity.tpl :
{else}{$address->email|escape:'htmlall':'UTF-8'}


comme ceci :

<input type="text" class="text" id="email" name="email" value="{if isset($smarty.post.email)}{$smarty.post.email}{else}{$address->email|escape:'htmlall':'UTF-8'}{/if}" />



- Il faut éditer le fichier Adress.php et non pas Customer.php

- la table à incrémenter c'est prefixe_address au lieu de prefixe_customer


Réaliser sur prestashop 1.3.6




Bonjour,

Suite à l'ajout de l'adresse e-mail de livraison j'aimerai que celle-ci apparaisse également dans le mail de confirmation de commande, comment dois-je procéder ? merci..
Link to comment
Share on other sites

Bonjour,

Bon finalement je me suis lancé en test local. Vraiment super ton tuto.
Donc pour ceux qui veulent ajouter un champ sur une adresse il faut suivre le tuto avec quelques modifications :

-Dans le fichier adress.tpl il faut ajouter une valeur pour permettre de visualiser l'entrée quand on revient sur l'adresse donc pas besoin de modifier le fichier identity.tpl :
{else}{$address->email|escape:'htmlall':'UTF-8'}


comme ceci :

<input type="text" class="text" id="email" name="email" value="{if isset($smarty.post.email)}{$smarty.post.email}{else}{$address->email|escape:'htmlall':'UTF-8'}{/if}" />



- Il faut éditer le fichier Adress.php et non pas Customer.php

- la table à incrémenter c'est prefixe_address au lieu de prefixe_customer


Réaliser sur prestashop 1.3.6




Bonjour,

Suite à l'ajout de l'adresse e-mail de livraison j'aimerai que celle-ci apparaisse également dans le mail de confirmation de commande, comment dois-je procéder ? merci..



Je viens d'essayer bêtement '{delivery_email}' => $email dans le fichier mailalerts.php du module mailalerts mais sa ne fonctionne pas ...
Link to comment
Share on other sites

  • 2 months later...
  • 1 month later...
  • 1 month later...

J'ai découvert ce très bon tutoriel et je me pose une question, à quel moment vous vérifiez le contenu du champ "Siret" ?

 

D'après mes tests, on entre un ou deux chiffres dans le champ et on peut valider le formulaire ! je me trompe ?

 

Avez-vous entendu parlé de l'algorithme de Luhn pour vérifier ce champ ? :huh:

 

VÉRIFICATION DE LA VALIDITÉ DES CODES SIRET ET SIREN (ALGO. DE LUHN)

Link to comment
Share on other sites

Bonjour

 

Je me permets de répondre à ce topic en croisant les doigts pour qu'il ne soit pas déplacé ou fermé. Si c'est le cas, je m'en excuse ;-)

 

Je viens donc de réaliser ce tuto, pas pour le siret, mais pour VAT NUMBER. Bref, tout a fonctionné. Le seul problème qui survient c'est dans mon back office.

 

Lorsque je suis dans l'onglet "Clients",sur une fiche client donc, et que je souhaite ajouter manuellement son numéro de TVA, je clique sur "enregistrer" mais ça ne prend pas mon ajout en compte.

Lorsque je retourne sur sa fiche, le champ reste vide.

 

Je souhaite ajouter à la main le numéro de TVA des clients qui ne l'ont pas rempli lors de leur inscription. Je n'ai pas voulu le rendre obligatoire pour ne pas bloquer les clients français, qui n'ont pas besoin de remplir ce champ.

 

Voilà, j'espère que quelqu'un pourra m'éclairer ... et que j'ai expliqué assez clairement mon problème.

 

Merci !

Link to comment
Share on other sites

Bonjour, merci pour ce tuto

 

Je galère pour ajouter un nouveau champ "Date d'accouchement", si quelqu'un peut m'aider ça serai gentil

j'ai fait les décalrations suivantes :

 

    public         $accouchement = NULL;


   public        $annees;
   public        $jours;
   public        $mois;

 

Dans $fieldsValidate :

'accouchement' => 'isBirthDate'

 

Dans getFields() :

$fields['birthday'] = pSQL($this->accouchement);

 

 

Dans add($autodate = true, $nullValues = true) :

$this->accouchement= (empty($this->annees) ? $this->accouchement: (int)($this->annees).'-'.(int)($this->mois).'-'.(int)($this->jours));

 

Merci d'avance.

Link to comment
Share on other sites

  • 4 weeks later...

Bonjour,

 

Je cherche à ajouter le siret (obligatoire) lors de l'inscription (presta 1.4.6.2)

j'ai suivi scrupuleusement le tuto mais j'ai toujours l'erreur :

  1. une erreur s'est produite pendant la création de votre compte

Pourtant le compte est bien créé avec toutes les données, mais pas l'adresse puisque le message d'erreur intervient juste avant, sur la fonction $customer->add().

Je peux modifier les données (client) en FrontEnd comme en BackEnd sans problème.

 

Bref, je n'arrive pas à trouver où ça coince !

 

J'avais déjà fait ce type d'ajout (grâce à ce tuto) sans aucune difficulté sur une version 1.3.7, mais là, impossible sur une version 1.4.6.2 !

 

Vous avez une petite idée ?

 

Merci d'avance pour votre aide.

Link to comment
Share on other sites

J'ai découvert ce très bon tutoriel et je me pose une question, à quel moment vous vérifiez le contenu du champ "Siret" ?

 

D'après mes tests, on entre un ou deux chiffres dans le champ et on peut valider le formulaire ! je me trompe ?

 

Avez-vous entendu parlé de l'algorithme de Luhn pour vérifier ce champ ? :huh:

 

VÉRIFICATION DE LA VALIDITÉ DES CODES SIRET ET SIREN (ALGO. DE LUHN)

je reprends cette remarque car elle est intéréssante, j'envisage de mettre en place ce tuto mais j'ai 2 question:

1. le nombre de caractère necessaires pour valider le champ est il paramétrable et comment, et sinon comment vérifier la validiter du siret?

2. d'où ma 2e question, si je dois vérifier les siret manuellement pour pouvoir ensuite basculer le client dans un compte pro, comment vais je être informée que l'un de mes clients à rempli le champ "siret" car si j'ai 50 inscriptions dans une journée, il faudrait tous les jours les ouvrir un à un pour vérifier la présence d'un siret...

 

donc comment mettre en place l'envoi auto d'un mail (comme pour les commandes) lorsque ce champ est rempli, avec indication du nom du client dans le mail, afin de pouvoir valider son compte en tant que pro et le basculer dans le bon groupe.

 

merci de vos réponses.

Link to comment
Share on other sites

  • 1 month later...
  • 1 month later...

Bonjour,

Je viens de lire ce sujet très intéressant, mais malheureusement, je ne trouve pas de réponse à ma question.

Vendant des pièces auto, je souhaiterai que le client puisse avoir, au moment du récapitulatif des noms et adresses, 4 ou 5 champs (exemple marque du véhicule, modèles, motorisation, année, spécificités...) et peut-être des bandeaux déroulants.

Vous pensez qu'il est nécessaire de modifier tout ça aussi, ou rajouter de simples champs au niveau du formulaire des noms et adresse et suffisant ?

Link to comment
Share on other sites

  • 1 month later...

Salut,

 

voici un aperçu des modifs (par rapport au TUTO de BVInce) que j'ai mis en place pour l'ajout d'un numéro SIRET. Dans cet exemple, j'ajoute aussi le nom de la société du client (car je travaille essentiellement en BtoB) donc j'attribue ces deux champs à un client donné et non pas à son adresse. Je travaille sous Prestashop v1.4.6.2.

 

J'ai d'abord créé un champ "siret" char(14) et "customer_company" varchar(64) dans la table customers.

 

J'ai surchargé la classe Customer.php. J'ai donc créé ce fichier override/classes/Customer.php, avec ce code :

 

class Customer extends CustomerCore
{
/** @var number Siret */
public  $siret;
public  $customer_company;
 protected  $fieldsRequired = array('lastname', 'passwd', 'firstname', 'email');
 protected  $fieldsSize = array('lastname' => 32, 'passwd' => 32, 'firstname' => 32, 'email' => 128, 'note' => 65000, 'siret' => 14, 'customer_company' => 64);
 protected  $fieldsValidate = array('secure_key' => 'isMd5', 'lastname' => 'isName', 'firstname' => 'isName', 'email' => 'isEmail', 'passwd' => 'isPasswd',
  'id_gender' => 'isUnsignedId', 'birthday' => 'isBirthDate', 'newsletter' => 'isBool', 'optin' => 'isBool', 'active' => 'isBool', 'note' => 'isCleanHtml', 'is_guest' => 'isBool', 'siret' => 'isSiret');
public function getFields()
{
 parent::validateFields();
 if (isset($this->id))
  $fields['id_customer'] = (int)($this->id);
 $fields['secure_key'] = pSQL($this->secure_key);
 $fields['note'] = pSQL($this->note, true);
 $fields['id_gender'] = (int)($this->id_gender);
 $fields['id_default_group'] = (int)($this->id_default_group);
 $fields['lastname'] = pSQL($this->lastname);
 $fields['firstname'] = pSQL($this->firstname);
 $fields['birthday'] = pSQL($this->birthday);
 $fields['email'] = pSQL($this->email);
 $fields['newsletter'] = (int)($this->newsletter);
 $fields['newsletter_date_add'] = pSQL($this->newsletter_date_add);
 $fields['ip_registration_newsletter'] = pSQL($this->ip_registration_newsletter);
 $fields['optin'] = (int)($this->optin);
 $fields['passwd'] = pSQL($this->passwd);
 $fields['last_passwd_gen'] = pSQL($this->last_passwd_gen);
 $fields['active'] = (int)($this->active);
 $fields['date_add'] = pSQL($this->date_add);
 $fields['date_upd'] = pSQL($this->date_upd);
 $fields['siret'] = pSQL($this->siret);
 $fields['customer_company'] = pSQL($this->customer_company);
 $fields['is_guest'] = (int)($this->is_guest);
 $fields['deleted'] = (int)($this->deleted);
 return $fields;
}
}

 

J'ai donc deux nouveaux champs : siret et customer_company.

 

Dans ce cas, je ne veux pas que ces champs soient obligatoires car j'accepte les clients non-professionnels aussi. Dans le cas contraire, ajouter ces champs dans :


protected  $fieldsRequired = ...


 

Comme le disait ChristopheS ici :


J'ai découvert ce très bon tutoriel et je me pose une question, à quel moment vous vérifiez le contenu du champ "Siret" ?

D'après mes tests, on entre un ou deux chiffres dans le champ et on peut valider le formulaire ! je me trompe ?

Avez-vous entendu parlé de l'algorithme de Luhn pour vérifier ce champ ? 

VÉRIFICATION DE LA VALIDITÉ DES CODES SIRET ET SIREN (ALGO. DE LUHN)


 

On peut effectivement vérifié la validité du SIRET grâce à l'algo de Luhn (pour ceux que ça intéresse : voir wikipédia). J'ai donc surchargé la classe Validate.php pour ajouter une fonction qui vérifiera l'exactitude du siret.

 

Ce qui donne, override/classes/Validate.php :

class Validate extends ValidateCore
{
//Fonction algorithme de Luhn
function isSiret($num)
{
	//longueur de la chaine $num
	$length = strlen($num);

	//resultat de l'addition de tous les chiffres
	$tot = 0;
	for($i=$length-1;$i>=0;$i--)
	{
		$digit = substr($num, $i, 1);

		if ((($length - $i) % 2) == 0)
		{
			$digit = $digit*2;
			if ($digit>9)
			{
				$digit = $digit-9;
			}
		}
		$tot += $digit;
	}

	return (($tot % 10) == 0);
}

}

 

Cette fonction est nécessaire dans le cas où l'on renseigne, dans Customer.php ceci :


protected  $fieldsValidate = array(.......'siret' => 'isSiret');


 

Dans le cas d'un numéro SIRET bidon, une erreur s'affichera au moment de la validation du formulaire.

 

J'ai aussi surchargé le controller AuthController, ce qui donne override/controllers/AuthController.php :

class AuthController extends AuthControllerCore
{
public function preProcess()
{
 if (self::$cookie->isLogged() AND !Tools::isSubmit('ajax'))
  Tools::redirect('my-account.php');
 if (Tools::getValue('create_account'))
 {
  $create_account = 1;
  self::$smarty->assign('email_create', 1);
 }
 if (Tools::isSubmit('SubmitCreate'))
 {
  if (!Validate::isEmail($email = Tools::getValue('email_create')) OR empty($email))
   $this->errors[] = Tools::displayError('Invalid e-mail address');
  elseif (Customer::customerExists($email))
  {
   $this->errors[] = Tools::displayError('An account is already registered with this e-mail, please fill in the password or request a new one.');
   $_POST['email'] = $_POST['email_create'];
   unset($_POST['email_create']);
  }
  else
  {
   $create_account = 1;
   self::$smarty->assign('email_create', Tools::safeOutput($email));
   $_POST['email'] = $email;
  }
 }
 if (Tools::isSubmit('submitAccount') OR Tools::isSubmit('submitGuestAccount'))
 {
  $create_account = 1;
  if (Tools::isSubmit('submitAccount'))
   self::$smarty->assign('email_create', 1);
  /* New Guest customer */
  if (!Tools::getValue('is_new_customer', 1) AND !Configuration::get('PS_GUEST_CHECKOUT_ENABLED'))
   $this->errors[] = Tools::displayError('You cannot create a guest account.');
  if (!Tools::getValue('is_new_customer', 1))
   $_POST['passwd'] = md5(time()._COOKIE_KEY_);
  if (isset($_POST['guest_email']) AND $_POST['guest_email'])
   $_POST['email'] = $_POST['guest_email'];
  /* Preparing customer */
  $customer = new Customer();
  $lastnameAddress = $_POST['lastname'];
  $firstnameAddress = $_POST['firstname'];
  $_POST['lastname'] = $_POST['customer_lastname'];
  $_POST['firstname'] = $_POST['customer_firstname'];

  $customer->siret = $_POST['siret'];
  $customer->customer_company = $_POST['customer_company'];

  if (!Tools::getValue('phone') AND !Tools::getValue('phone_mobile'))
   $this->errors[] = Tools::displayError('You must register at least one phone number');
  if (!@checkdate(Tools::getValue('months'), Tools::getValue('days'), Tools::getValue('years')) AND !(Tools::getValue('months') == '' AND Tools::getValue('days') == '' AND Tools::getValue('years') == ''))
   $this->errors[] = Tools::displayError('Invalid date of birth');
  $customer->birthday = (empty($_POST['years']) ? '' : (int)($_POST['years']).'-'.(int)($_POST['months']).'-'.(int)($_POST['days']));
  $this->errors = array_unique(array_merge($this->errors, $customer->validateControler()));
  /* Preparing address */
  $address = new Address();
  $_POST['lastname'] = $lastnameAddress;
  $_POST['firstname'] = $firstnameAddress;
  $address->id_customer = 1;
  $this->errors = array_unique(array_merge($this->errors, $address->validateControler()));
  /* US customer: normalize the address */
  if ($address->id_country == Country::getByIso('US'))
  {
   include_once(_PS_TAASC_PATH_.'AddressStandardizationSolution.php');
   $normalize = new AddressStandardizationSolution;
   $address->address1 = $normalize->AddressLineStandardization($address->address1);
   $address->address2 = $normalize->AddressLineStandardization($address->address2);
  }
  $zip_code_format = Country::getZipCodeFormat((int)(Tools::getValue('id_country')));
  if (Country::getNeedZipCode((int)(Tools::getValue('id_country'))))
  {
   if (($postcode = Tools::getValue('postcode')) AND $zip_code_format)
   {
 $zip_regexp = '/^'.$zip_code_format.'$/ui';
 $zip_regexp = str_replace(' ', '( |)', $zip_regexp);
 $zip_regexp = str_replace('-', '(-|)', $zip_regexp);
 $zip_regexp = str_replace('N', '[0-9]', $zip_regexp);
 $zip_regexp = str_replace('L', '[a-zA-Z]', $zip_regexp);
 $zip_regexp = str_replace('C', Country::getIsoById((int)(Tools::getValue('id_country'))), $zip_regexp);
 if (!preg_match($zip_regexp, $postcode))
  $this->errors[] = '<strong>'.Tools::displayError('Zip/ Postal code').'</strong> '.Tools::displayError('is invalid.').'<br />'.Tools::displayError('Must be typed as follows:').' '.str_replace('C', Country::getIsoById((int)(Tools::getValue('id_country'))), str_replace('N', '0', str_replace('L', 'A', $zip_code_format)));
   }
   elseif ($zip_code_format)
 $this->errors[] = '<strong>'.Tools::displayError('Zip/ Postal code').'</strong> '.Tools::displayError('is required.');
   elseif ($postcode AND !preg_match('/^[0-9a-zA-Z -]{4,9}$/ui', $postcode))
 $this->errors[] = '<strong>'.Tools::displayError('Zip/ Postal code').'</strong> '.Tools::displayError('is invalid.');
  }
  if (Country::isNeedDniByCountryId($address->id_country) AND (!Tools::getValue('dni') OR !Validate::isDniLite(Tools::getValue('dni'))))
   $this->errors[] = Tools::displayError('Identification number is incorrect or has already been used.');
  elseif (!Country::isNeedDniByCountryId($address->id_country))
   $address->dni = NULL;
  if (!sizeof($this->errors))
  {
   if (Customer::customerExists(Tools::getValue('email')))
 $this->errors[] = Tools::displayError('An account is already registered with this e-mail, please fill in the password or request a new one.');
   if (Tools::isSubmit('newsletter'))
   {
 $customer->ip_registration_newsletter = pSQL(Tools::getRemoteAddr());
 $customer->newsletter_date_add = pSQL(date('Y-m-d H:i:s'));
   }

   if (!sizeof($this->errors))
   {
 if (!$country = new Country($address->id_country, Configuration::get('PS_LANG_DEFAULT')) OR !Validate::isLoadedObject($country))
  die(Tools::displayError());
 if ((int)($country->contains_states) AND !(int)($address->id_state))
  $this->errors[] = Tools::displayError('This country requires a state selection.');
 else
 {
  $customer->active = 1;
  /* New Guest customer */
  if (Tools::isSubmit('is_new_customer'))
   $customer->is_guest = !Tools::getValue('is_new_customer', 1);
  else
   $customer->is_guest = 0;
  if (!$customer->add())
   $this->errors[] = Tools::displayError('An error occurred while creating your account. plop');
  else
  {
   $address->id_customer = (int)($customer->id);
   if (!$address->add())
    $this->errors[] = Tools::displayError('An error occurred while creating your address.');
   else
   {
    if (!$customer->is_guest)
    {
	 if (!Mail::Send((int)(self::$cookie->id_lang), 'account', Mail::l('Welcome!'),
	 array('{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{email}' => $customer->email, '{passwd}' => Tools::getValue('passwd')), $customer->email, $customer->firstname.' '.$customer->lastname))
	  $this->errors[] = Tools::displayError('Cannot send email');
    }
    self::$smarty->assign('confirmation', 1);
    self::$cookie->id_customer = (int)($customer->id);
    self::$cookie->customer_lastname = $customer->lastname;
    self::$cookie->customer_firstname = $customer->firstname;
    self::$cookie->passwd = $customer->passwd;
    self::$cookie->logged = 1;
    self::$cookie->email = $customer->email;
    self::$cookie->is_guest = !Tools::getValue('is_new_customer', 1);
    /* Update cart address */
    self::$cart->secure_key = $customer->secure_key;
    self::$cart->id_address_delivery = Address::getFirstCustomerAddressId((int)($customer->id));
    self::$cart->id_address_invoice = Address::getFirstCustomerAddressId((int)($customer->id));
    self::$cart->update();
    Module::hookExec('createAccount', array(
	 '_POST' => $_POST,
	 'newCustomer' => $customer
    ));
    if (Tools::isSubmit('ajax'))
    {
	 $return = array(
	  'hasError' => !empty($this->errors),
	  'errors' => $this->errors,
	  'isSaved' => true,
	  'id_customer' => (int)self::$cookie->id_customer,
	  'id_address_delivery' => self::$cart->id_address_delivery,
	  'id_address_invoice' => self::$cart->id_address_invoice,
	  'token' => Tools::getToken(false)
	 );
	 die(Tools::jsonEncode($return));
    }
    if ($back = Tools::getValue('back'))
	 Tools::redirect($back);
    Tools::redirect('my-account.php');
   }
  }
 }
   }
  }
  if (sizeof($this->errors))
  {
   if (!Tools::getValue('is_new_customer'))
 unset($_POST['passwd']);
   if (Tools::isSubmit('ajax'))
   {
 $return = array(
  'hasError' => !empty($this->errors),
  'errors' => $this->errors,
  'isSaved' => false,
  'id_customer' => 0
 );
 die(Tools::jsonEncode($return));
   }
  }
 }
 if (Tools::isSubmit('SubmitLogin'))
 {
  Module::hookExec('beforeAuthentication');
  $passwd = trim(Tools::getValue('passwd'));
  $email = trim(Tools::getValue('email'));
  if (empty($email))
   $this->errors[] = Tools::displayError('E-mail address required');
  elseif (!Validate::isEmail($email))
   $this->errors[] = Tools::displayError('Invalid e-mail address');
  elseif (empty($passwd))
   $this->errors[] = Tools::displayError('Password is required');
  elseif (Tools::strlen($passwd) > 32)
   $this->errors[] = Tools::displayError('Password is too long');
  elseif (!Validate::isPasswd($passwd))
   $this->errors[] = Tools::displayError('Invalid password');
  else
  {
   $customer = new Customer();
   $authentication = $customer->getByEmail(trim($email), trim($passwd));
   if (!$authentication OR !$customer->id)
   {
 /* Handle brute force attacks */
 sleep(1);
 $this->errors[] = Tools::displayError('Authentication failed');
   }
   else
   {
 self::$cookie->id_compare = isset(self::$cookie->id_compare) ? self::$cookie->id_compare: CompareProduct::getIdCompareByIdCustomer($customer->id);
 self::$cookie->id_customer = (int)($customer->id);
 self::$cookie->customer_lastname = $customer->lastname;
 self::$cookie->customer_firstname = $customer->firstname;
 self::$cookie->logged = 1;
 self::$cookie->is_guest = $customer->isGuest();
 self::$cookie->passwd = $customer->passwd;
 self::$cookie->email = $customer->email;
 if (Configuration::get('PS_CART_FOLLOWING') AND (empty(self::$cookie->id_cart) OR Cart::getNbProducts(self::$cookie->id_cart) == 0))
  self::$cookie->id_cart = (int)(Cart::lastNoneOrderedCart((int)($customer->id)));
 /* Update cart address */
 self::$cart->id_carrier = 0;
 self::$cart->id_address_delivery = Address::getFirstCustomerAddressId((int)($customer->id));
 self::$cart->id_address_invoice = Address::getFirstCustomerAddressId((int)($customer->id));
 // If a logged guest logs in as a customer, the cart secure key was already set and needs to be updated
 self::$cart->secure_key = $customer->secure_key;
 self::$cart->update();
 Module::hookExec('authentication');
 if (!Tools::isSubmit('ajax'))
 {
  if ($back = Tools::getValue('back'))
   Tools::redirect($back);
  Tools::redirect('my-account.php');
 }
   }
  }
  if (Tools::isSubmit('ajax'))
  {
   $return = array(
 'hasError' => !empty($this->errors),
 'errors' => $this->errors,
 'token' => Tools::getToken(false)
   );
   die(Tools::jsonEncode($return));
  }
 }
 if (isset($create_account))
 {
  /* Select the most appropriate country */
  if (isset($_POST['id_country']) AND is_numeric($_POST['id_country']))
   $selectedCountry = (int)($_POST['id_country']);
  /* FIXME : language iso and country iso are not similar,
   * maybe an associative table with country an language can resolve it,
   * But for now it's a bug !
   * @see : bug #6968
   * @link:http://www.prestashop.com/bug_tracker/view/6968/
  elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
  {
   $array = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
   if (Validate::isLanguageIsoCode($array[0]))
   {
 $selectedCountry = Country::getByIso($array[0]);
 if (!$selectedCountry)
  $selectedCountry = (int)(Configuration::get('PS_COUNTRY_DEFAULT'));
   }
  }*/
  if (!isset($selectedCountry))
   $selectedCountry = (int)(Configuration::get('PS_COUNTRY_DEFAULT'));
  if (Configuration::get('PS_RESTRICT_DELIVERED_COUNTRIES'))
   $countries = Carrier::getDeliveredCountries((int)self::$cookie->id_lang, true, true);
  else
   $countries = Country::getCountries((int)self::$cookie->id_lang, true);

  self::$smarty->assign(array(
   'countries' => $countries,
   'sl_country' => (isset($selectedCountry) ? $selectedCountry : 0),
   'vat_management' => Configuration::get('VATNUMBER_MANAGEMENT')
  ));
  /* Call a hook to display more information on form */
  self::$smarty->assign(array(
   'HOOK_CREATE_ACCOUNT_FORM' => Module::hookExec('createAccountForm'),
   'HOOK_CREATE_ACCOUNT_TOP' => Module::hookExec('createAccountTop')
  ));
 }
 /* Generate years, months and days */
 if (isset($_POST['years']) AND is_numeric($_POST['years']))
  $selectedYears = (int)($_POST['years']);
 $years = Tools::dateYears();
 if (isset($_POST['months']) AND is_numeric($_POST['months']))
  $selectedMonths = (int)($_POST['months']);
 $months = Tools::dateMonths();
 if (isset($_POST['days']) AND is_numeric($_POST['days']))
  $selectedDays = (int)($_POST['days']);
 $days = Tools::dateDays();
 self::$smarty->assign(array(
  'years' => $years,
  'sl_year' => (isset($selectedYears) ? $selectedYears : 0),
  'months' => $months,
  'sl_month' => (isset($selectedMonths) ? $selectedMonths : 0),
  'days' => $days,
  'sl_day' => (isset($selectedDays) ? $selectedDays : 0)
 ));
 self::$smarty->assign('newsletter', (int)Module::getInstanceByName('blocknewsletter')->active);
}
}

 

Et pour finir, j'ai ajouté les deux champs dans le formulaire d'inscription et dans celui de "Mon compte".

 

Dans themes/mon_theme/identity.tpl et themes/mon_theme/authentification.tpl :

Ajouter (ou vous voulez en repérant le champ "id_gender" par exemple) :

<p class="text">
<label for="customer_company">{l s='Company'} </label>
<input type="text" class="text" id="customer_company" name="customer_company" value="{if isset($smarty.post.customer_company)}{$smarty.post.customer_company}{/if}" />
  </p>
  <p class="text">
<label for="siret">{l s='SIRET'} </label>
<input type="text" class="text" id="siret" name="siret" value="{if isset($smarty.post.siret)}{$smarty.post.siret}{/if}" />
  </p>

 

!!! ATTENTION : Si vous utilisez le onepagecheckout, il faut modifier deux autres fichiers !!

Dans themes/js/order-opc.js, ajouter ceci l.518 (environ):

  params += 'siret='+encodeURIComponent($('#siret').val())+'&';
  params += 'customer_company='+encodeURIComponent($('#customer_company').val())+'&';

 

Et dans themes/mon_theme/order-opc-new-account.tpl :

<p class="text">
 <label for="customer_company">{l s='Company'} </label>
 <input type="text" class="text" id="customer_company" name="customer_company" onblur="$('#company').val($(this).val());" value="{if isset($guestInformations) && $guestInformations.customer_company}{$guestInformations.customer_company}{/if}" />
   </p>
   <p class="text">
 <label for="siret">{l s='SIRET'} </label>
 <input type="text" class="text" id="siret" name="siret" value="{if isset($guestInformations) && $guestInformations.siret}{$guestInformations.siret}{/if}" />
   </p>

 

En cas de champs obligatoires, rajouter un required dans la classe du <p>, comme ceci :

<p class="required text">

 

J'ai testé ce code avec ET sans le onepagecheckout et cela fonctionne bien pour moi. Il y aura peut-être qq arrangements à faire si vous acceptez les comptes invités.

 

Enjoy ;)

Edited by GhosToM (see edit history)
Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,

je me permet de revenir j'ai une erreur qui se produit.

Quand un utilisateur s'enregistre, lorsqu'il envoie ses données il obtient ce message "une erreur s'est produite pendant la création de votre compte".

Le hic c'est que son enregistrement c'est bien passé puisqu'il apparait dans la base de donnée mais il n'arrive pas à se connecter.

 

Dans la partie administration lorsque je veux éditer les informations d'un client je ne peux pas mettre à jour les modifications car on me dis de donner un numéro de siret (même si ce dernier n'est pas vide)

Link to comment
Share on other sites

Bonjour,

je me permet de revenir j'ai une erreur qui se produit.

Quand un utilisateur s'enregistre, lorsqu'il envoie ses données il obtient ce message "une erreur s'est produite pendant la création de votre compte". L'enregistrement marche néanmoins (il apparait comme client dans le back office et dans la table).

Lorsqu'il se connecte mais qu'il veut modifier ses informations, s'il écrit son mot de passe actuel et qu'il laisse tranquille le numéro de siret, tout marche, mais s'il ne met pas son mot de passe actuel on me dit :

"

 

Il y a 2 erreurs :

  1. Un compte existe déjà avec cette adresse e-mail
  2. le mot de passe ne correspond pas avec l'actuel "

J'ai ensuite le droit à trois beaux cadres d'erreur orange avec comme messages :

Notice: Undefined index: id_gender in C:\wamp\www\pres\tools\smarty\compile

\a62786c258349644a2598d3c576708992ccf156e.file.identity.tpl.php on line 56

suite à cette erreur je vous met le code modifié dans le tpl

 

la deuxième erreur :Notice: Undefined index: id_gender in C:\wamp\www\pres\tools\smarty\compile\a62786c258349644a2598d3c576708992ccf156e.file.identity.tpl.php on line 56

 

la troisième erreur : Notice: Undefined index: id_gender in C:\wamp\www\pres\tools\smarty\compile\a62786c258349644a2598d3c576708992ccf156e.file.identity.tpl.php on line 59

   	 <p class="required text">
			<label for="siret">{l s='siret'}</label>
			<input type="text" name="siret" id="siret" readonly="readonly" value="{$smarty.post.siret}" /> <sup>*</sup>
		</p>

 

 

J'ai suivi les directives :

dans authController j'ai ajouté :

$customer->siret = $_POST['siret'];

 

dans customer voila les lignes que j'ai ajouté :

//je nomme l'a variable
public $siret;
protected	 $fieldsRequired = array('lastname', 'passwd', 'firstname', 'email','siret');
 protected	 $fieldsSize = array(blabla,'siret' => 14);
 protected	 $fieldsValidate = array(blabla,'siret' =>'isSiret');

//dans la fonction getFields
$fields['siret']=pSQL($this->siret);

 

dernière erreur bizarre, je n'ai pas touché au fait qu'il faut donner une addresse pour pouvoir s'enregistrer, or lorsuqe j'ai vérifier (coté client) si je pouvais modifier l'adresse et bien....il n'y en avait pas. j'en ai crée une mais on est plus obligé.

Edited by locean67 (see edit history)
Link to comment
Share on other sites

Bonjour,

oui j'ai désactivé le cache et forcé la recompilation de Smarty.

J'ai retenté la manip et cette fois je n'ai pas d'erreur....mais la vérification du numéro de siret ne s'effectue pas....

 

EDIT : bon après vérification, la vérification marche bien, mais il vaut mieux permettre la saisie de chiffre uniquement....sinon on passe au travers ^^".

Suffit d'un petit script javascript tout simple :

 

{literal}
<script type="text/javascript">

function nospace(event) {
   var key=event.keyCode;
   var which=event.which;
   // Compatibilité IE / Firefox
   if(!event&&window.event) {
       event=window.event;
   }
   // IE
   if( key> 0 && key<37 && key!=8|| key>39 && key<48||key>57 && key<96 ||key>105) {
       event.returnValue = false;
       event.cancelBubble = true;
   }
       // DOM
   if(which > 0 && which<37 && key!=8|| which>39 && which<48||which>57 && which<96 ||which>105) {
       event.preventDefault();
       event.stopPropagation();
       event.returnValue = false;
       event.cancelBubble = true;
   }
}
</script>
{/literal}
<script type="text/javascript">

J'accepte les chiffres et le backspace(plus les touches gauches droites). Il y'a cependant quelques problèmes, il accepte les tirets et autres.

Edited by locean67 (see edit history)
Link to comment
Share on other sites

Salut,

 

effectivement, je n'avais pas pris en compte le fait que ça ne soit pas un nombre...

Du coup, j'ai fait autrement, j'ai modifié un peu la fonction isSiret, dans override/classes/Validate.php, comme ceci :

class Validate extends ValidateCore
{
//Fonction algorithme de Luhn
function isSiret($num)
{
 //longueur de la chaine $num
 $length = strlen($num);

 if(preg_match('/^[0-9]{0,14}$/', $num) AND $length == 14) {

  //resultat de l'addition de tous les chiffres
  $tot = 0;
  for($i=$length-1;$i>=0;$i--)
  {
   $digit = substr($num, $i, 1);

   if ((($length - $i) % 2) == 0)
   {
 $digit = $digit*2;
 if ($digit>9)
 {
  $digit = $digit-9;
 }
   }
   $tot += $digit;
  }

  return (($tot % 10) == 0);
 }
 else
  return false;
}

}

 

Pour ma part, ça à l'air de bien fonctionner.

A+

  • Like 1
Link to comment
Share on other sites

Bonjour, j'ai suivi ce tuto à la lettre et j'ai réussi a insérer un champ siret dans mon formulaire et a l’intégrer dans ma base de donnée, maintenant je souhaiterais que l'utilisateur puise joindre un fichier (kbis par exemple au format pdf). J'ai donc pondu ce petit code a l’intérieur du fichier Authcontroller.php dans la fonction AuthControllerCore à l'interieur du "

if (Tools::isSubmit('submitAccount') OR Tools::isSubmit('submitGuestAccount'))

" :

 

if(isset($_FILES['file']))
  {
$fichier = basename($_FILES['avatar']['name']);
$chemin = 'file/';
if(!move_uploaded_file($_FILES['file']['tmp_name'],$chemin . $fichier))
{
 $this->errors[] = Tools::displayError('fichier non recu');
}
  }

 

Sachant que dans mon formulaire j'ai bien appeler mon input "file" et qu'il m'affiche l'erreur "fichier non reçu". j'ai aussi vérifier les droit en écriture des fichiers. après pas mal de test c'est bien la ligne

move_uploaded_file(...

qui pose problème je ne m'occupe pour le moment pas des restriction de format et autres sécurités je l'ajouterais quand j'aurais réussi. Si qq'un a une idée je l'en remercie d'avance.

 

Prestashop 1.4

Edited by Misfortune (see edit history)
Link to comment
Share on other sites

Un petit up pour réitérer ma demande !

je me suis intéressé aux autres importation de fichier native de prestashop par exemple l'image d'un produit et ils utilisent jQuery ajax une fonction uploadFile à laquelle je ne comprend rien qui est appelé lors du changement d'état de la balise <input type="file" onchange="uploadFile();">

 

si quelqu'un peut m'aider merci ;)

Link to comment
Share on other sites

Bonjour, j'ai suivi ce tuto pour ajouter un champ Fax, ayant eu des problèmes avec mes modifications j'ai tous supprimé, vidé le cache smarty et forcer la recompilation, pourtant quand je créer un nouvelle utilisateur, un message d'erreur "fax requis" est affiché alors que j'ai supprimé tout ce qui avait en rapport avec le fax, y compris dans la base de données. Si quelqu'un pourrait m'aidé..

Link to comment
Share on other sites

  • 2 weeks later...
  • 2 months later...

Salut,

 

Merci pour ce tuto, il m'a bien rendu service. Par contre j'ai un souci :

 

J'ai voulu ajouter une autre case à cocher dans "identity.tpl" de la même manière que celle pour s'inscrire à la newsletter. Mais le problème c'est que ça marche lorsque je coche la case (cela met bien à jour le champ en bdd), mais lorsques je la décoche ça ne fonctionne pas, le champ dans la bdd n'est pas mis à jour...

 

Pourquoi cela ?

 

Merci d'avance ;)

Edited by ben5back (see edit history)
Link to comment
Share on other sites

  • 1 month later...

bonjour à tous,

(désolé de réouvrir le post)

 

pourriez vous me dire si le tutoriels mis généreusement par Bvince, fonctionne sur la version prestashop 1.5.0.17 ?! ^_^ ..

car certains fichier et dossier ne sont pas identique et n'y si trouve pas :unsure: ..

 

et si quelqu'un avait la démarche pour cette version si je suis preneur :wub: ..

 

Merci d'avance à tous

Link to comment
Share on other sites

  • 2 weeks later...

Même demande que le'ptireunionnais974, si quelqu'un connaît les modifications à effectuer par rapport à Prestashop 1.5 ce serait génial, parce que j'essaye de mon côté et j'ai pas mal de difficultés.

Et un ptit soutien de la part de la communauté m'éviterait d'avoir à revenir sur une version 1.4.x ... voir de chercher mon bonheur chez Magento :unsure:

Link to comment
Share on other sites

  • 2 weeks later...
  • 1 month later...

Bonjour, j'ai suivi ce tuto à la lettre et tout semble bien marcher.

 

A la place du champ "Siret" j'ai ajouté un champ "Produit désiré" pour que l'utilisateur évoque ses préférences lors de son inscription.

 

Néanmoins j'aimerais savoir où l'on peut consulter cette information ? Car j'ai beau consulter les fiches clients dans l'admin, aucune trace de ce champ, ce qui le rend inutile comme vous l'aurez compris...

 

Même chose pour "Informations complémentaires", j'ai simulé une inscription avec une adresse bidon en prenant soin de remplir ce champ, et encore une fois pas moyen de voir où ce champ est consultable... (voir ce topic laissé sans réponse)

 

Merci à tous pour votre aide !

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,

 

j'aurais une petite question concernant ce genre de modification similaire, moi je voudrais vérifier toutes les informations manuellement et seulement après valider le compte du professionnel.

 

En gros je voudrais savoir comment faire pour que le compte soit inactif après l'inscription du client et que je puisse le valider après vérification des informations via le BO??

 

En vous remerciant.

 

Cordialement.

Link to comment
Share on other sites

@Tchupa : pour que les nouveaux comptes soient inactifs par défaut il faut que tu manipules le contrôleur qui gère l'authentification.

Tu peux modifier la valeur $customer->active=1 en customer-active=0 en lignes 408 ou 530 (selon que tu utilises l'inscription sur 1 page ou non) de controllers/front/authcontroller;php

Et sinon tu peux faire la même chose par override.

Link to comment
Share on other sites

  • 1 month later...

"AJOUTER UN CHAMP OBLIGATOIRE AU FORMULAIRE D'INSCRIPTION" :

 

Editons le fichier authentication.tpl disponible dans le dossier de votre thème, nous allons ajouter un champ obligatoire où le client devra saisir sont numéro SIRET. Le numéro de SIRET va être enregistré dans la table customer de la base de donnée et sera donc rattaché au client et non à une adresse.

Nous devons premièrement modifier ce fichier pour ajouter la zone de saisie destinée au client, on va intercaler entre 2 champs existants le code suivant :

 


{l s='SIRET'}
<input type="text" class="text" id="siret" name="siret" value="{if isset($smarty.post.siret)}{$smarty.post.siret}{/if}" />
[sup]*[/sup]

 

A partir de maintenant le client aura une zone SIRET à remplir dans son formulaire d'inscription.

 

Editons le fichier Customer.php du dossier classes pour réaliser les modifications d'enregistrement de données, on va ajouter le champ SIRET comme champ et comme obligatoire, dans la liste des déclarations de variable, on va ajouter :

 

public		 $siret;

 

on le rend obligatoire :

 

protected	 $fieldsRequired = array('lastname', 'passwd', 'firstname', 'email', 'siret');

 

et on définit les paramètres de taille et de type :

 

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

 

Dans la fonction getFields(), on va ajouter la récupération de la donnée SIRET :

 

$fields['siret'] = pSQL($this->siret);

 

Maintenant nous allons ajouter un champ nommé "siret" dans la table customer de la base de donnée type VARCHAR taille 128 NOT NULL.

 

REQUÊTE SQL :
ALTER TABLE prefix_customer ADD `siret` VARCHAR(128) NOT NULL

 

remplacer prefix par le préfixe que vous avez choisi lors de l’installation de Prestashop.

 

Le client devra donc saisir obligatoirement le numéro de SIRET pour pouvoir créer un compte.

 

Editons le fichier identity.tpl disponible dans le dossier de votre thème, nous allons ajouter le champ SIRET pour que le client puisse visualiser et/ou éditer son numéro de SIRET dans son compte, pour ce faire, on va ajouter une zone de saisie dans le formulaire :

 


{l s='SIRET'}[sup]*[/sup]
<input type="text" name="siret" id="siret" value="{$smarty.post.siret}" />

 

Le client pourra à l'aide de ce code, visualiser et modifier son numéro de SIRET, si vous préférez simplement le rendre visualisable, ajoutez READONLY sur le INPUT.

 

Il peut être judicieux de pouvoir visualiser et/ou modifier cette information en BackOffice, on va donc faire apparaître l'information en BackOffice:

Editons le fichier AdminCustomers.php disponible dans le dossier /admin/tabs, on va modifier le code de la manière suivante pour faire apparaître sous la dernière date de visite le numéro de SIRET, dans la fonction viewcustomer() :

 

	
[url=""]id.'&token;='.$this->token.'">[img=../img/admin/edit.gif][/url]	
	[size=4][b]'.$customer->firstname.' '.$customer->lastname.'[/b][/size]
	<img />id_gender == 2 ? 'female' : ($customer->id_gender == 1 ? 'male' : 'unknown')).'.gif" style="margin-bottom: 5px" />

	[url=""]email.'" style="text-decoration: underline; color: blue">'.$customer->email.'[/url]


	'.$this->l('ID:').' '.sprintf('d', $customer->id).'

	'.$this->l('Registration date:').' '.Tools::displayDate($customer->date_add, intval($cookie->id_lang), true).'

	'.$this->l('Last visit:').' '.($customerStats['last_visit'] ? Tools::displayDate($customerStats['last_visit'], intval($cookie->id_lang), true) : $this->l('never')).'

	'.$this->l('SIRET :').' '.$customer->siret.'

 

Vous voyez la ligne SIRET en bas du FIELDSET.

 

Dans la fonction DisplayForm(), on va ajouter la ligne qui va nous permettre d'éditer le code SIRET si besoin, donc la modification suivante est à insérer après un champ existant :

 

'.$this->l('SIRET:').' 

<input type="text" size="33" name="siret" value="'.$this->getFieldValue($obj, 'siret').'" /> [sup]*[/sup]

 

Maintenant on peut éditer le numéro de SIRET du client et le modifier.

 

Voilà, j'espère que ce TUTORIAL vous paraît clair, et qu'il pourra vous aider.....

;-)

 

ATTENTION : Tous les clients déjà enregistrés ne pourront plus accéder à leur fiche compte car il n'avait pas de code SIRET avant la mise en place de cette modification, pour leur affecter un code SIRET "bidon" en attendant un remplissage correct, il est nécessaire de lancer cette requête :

 

REQUÊTE SQL :
UPDATE prefix_customer SET siret= "0123456789" WHERE siret="" OR ISNULL(siret) 

 

remplacer prefix par le préfixe que vous avez choisi lors de l’installation de Prestashop.

 

 

Un grand merci pour ce tuto. Il faut parfois prendre le temps de remercier le temps passé par certains alors bravo et merci

Link to comment
Share on other sites

  • 2 months later...

Bonjour,

je me permet de venir poser une question.

J'ai suivit le tuto à la lettre, ça ne marche pas chez moi.

Je n'ai aucun changement sur le front office, le champ "siret" n'apparait pas. Par contre, il est impossible de s'inscrire : une fois les données rentrées dans l'authentification, et validées, un message d'erreur s'affiche comme quoi il manque le numéro de siret.

J'ai vidé le cache, le smarty, rien ne change.

Et dans mon Back Office, lorsque je clic sur l'onglet "client", la page est vide.

J'utilise la version 1.4.9.0, avec le theme original.

Quelqu'un aurait-il une idée ?

Merci pour vos réponses.

 

Céline.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...