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...