BVince Posted June 4, 2010 Share Posted June 4, 2010 "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. 3 Link to comment Share on other sites More sharing options...
rosebleue Posted June 4, 2010 Share Posted June 4, 2010 Merci pour ce tutoa s'avoir que si on veux un deuxieme champs TVA on refait la mpeme manipe et on remplace siret par tva ? si j'ai bien tout suivi Link to comment Share on other sites More sharing options...
Maury Girard Posted June 4, 2010 Share Posted June 4, 2010 BVinceMerci pour ce tutoriel que vous avez mit à contribution pour la communauté FR Link to comment Share on other sites More sharing options...
Sked Posted June 17, 2010 Share Posted June 17, 2010 Merci pour ce tuto très clair et très intéressant Link to comment Share on other sites More sharing options...
SNA Informatique Posted June 19, 2010 Share Posted June 19, 2010 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 More sharing options...
cvbdev Posted June 30, 2010 Share Posted June 30, 2010 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 More sharing options...
BVince Posted June 30, 2010 Author Share Posted June 30, 2010 Bonjour,ce genre d'erreur peut être du à un problème de nom de champ, en effet il serait bon de vérifier que le mot "siret" est écrit partout de la même manière en respectant la casse... Link to comment Share on other sites More sharing options...
cvbdev Posted June 30, 2010 Share Posted June 30, 2010 Bonjour,Merci de ta réponse !Je vérifie et je tiens au courant ! Link to comment Share on other sites More sharing options...
cvbdev Posted June 30, 2010 Share Posted June 30, 2010 Re,Je viens de vérifier tout les champs sont absolument identiques, la casse y compris...:/Une idée ?++ Link to comment Share on other sites More sharing options...
BVince Posted June 30, 2010 Author Share Posted June 30, 2010 une idée ?oui, reprendre le tutorial depuis le début et bien vérifier que rien n'a été oublié, j'ai utilisé cette méthode sur plusieurs sites sans jamais obtenir ce problème... Link to comment Share on other sites More sharing options...
cvbdev Posted June 30, 2010 Share Posted June 30, 2010 J'ai remis exactement le même code. Je n'ai pas rendu le champs obligatoire SIRET c'est tout !Ca ne fonctionne toujours pas. Quelle version as tu utilisé ?Si des idées je suis preneur !++ Link to comment Share on other sites More sharing options...
cmarchand Posted July 1, 2010 Share Posted July 1, 2010 BonjourJ'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 More sharing options...
France Posted July 15, 2010 Share Posted July 15, 2010 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 More sharing options...
BVince Posted July 16, 2010 Author Share Posted July 16, 2010 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 More sharing options...
AAymeric Posted July 16, 2010 Share Posted July 16, 2010 Nice le tuto et merci -) Link to comment Share on other sites More sharing options...
France Posted July 16, 2010 Share Posted July 16, 2010 Merci BVince pour ta réponse.Concernant le fichier pdf, j'imagine qu'il faut faire dans le genre de ce que l'on retrouve dans ce tutohttp://www.prestashop.com/forums/viewthread/26530/configuration_et_utilisation_de_prestashop/tutorial_ajouter_un_champ_tva_intracommunautaire_obligatoireMerci Link to comment Share on other sites More sharing options...
Jumk Posted July 19, 2010 Share Posted July 19, 2010 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 More sharing options...
France Posted July 19, 2010 Share Posted July 19, 2010 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.phpComment 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 More sharing options...
France Posted July 19, 2010 Share Posted July 19, 2010 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 =PMaintenant 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 More sharing options...
Jumk Posted July 20, 2010 Share Posted July 20, 2010 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 More sharing options...
Jumk Posted July 20, 2010 Share Posted July 20, 2010 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 More sharing options...
France Posted July 20, 2010 Share Posted July 20, 2010 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 More sharing options...
France Posted July 20, 2010 Share Posted July 20, 2010 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 JumkCes 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 More sharing options...
Jumk Posted July 20, 2010 Share Posted July 20, 2010 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 More sharing options...
France Posted July 20, 2010 Share Posted July 20, 2010 J'ai toujours le même problème :-( Une erreur s'est produit lors de la création de votre compteLe problème c'est que je ne sais pas c'est quoi l'erreur.Récapitulatif de ce que j'ai faitDans 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 More sharing options...
BVince Posted July 21, 2010 Author Share Posted July 21, 2010 Bonjour,dans le fichier authentication.tpl, il y a déjà un INPUT company, je ne vois pas pourquoi tu veux en ajouter un deuxième ? Link to comment Share on other sites More sharing options...
Jumk Posted July 21, 2010 Share Posted July 21, 2010 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 More sharing options...
France Posted July 21, 2010 Share Posted July 21, 2010 Bonjour BVince et JumkJ'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 More sharing options...
BVince Posted July 21, 2010 Author Share Posted July 21, 2010 Donc tu n'as pas besoin d'ajouter un champ dans la fiche d'inscription mais de modifier l'édition de la facture.... Link to comment Share on other sites More sharing options...
France Posted July 21, 2010 Share Posted July 21, 2010 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 More sharing options...
BVince Posted July 21, 2010 Author Share Posted July 21, 2010 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 More sharing options...
France Posted July 21, 2010 Share Posted July 21, 2010 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 More sharing options...
BVince Posted July 21, 2010 Author Share Posted July 21, 2010 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 More sharing options...
France Posted July 21, 2010 Share Posted July 21, 2010 Bonjour BVinceC'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 Link to comment Share on other sites More sharing options...
BVince Posted July 22, 2010 Author Share Posted July 22, 2010 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 More sharing options...
France Posted July 22, 2010 Share Posted July 22, 2010 Bonjour BVinceBien 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 More sharing options...
Ricky6DK Posted September 27, 2010 Share Posted September 27, 2010 "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 More sharing options...
Airclic Posted November 18, 2010 Share Posted November 18, 2010 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.phpprotected $fieldsRequired = array('lastname', 'passwd', 'firstname', 'email', 'votrenouveauchamps'); Link to comment Share on other sites More sharing options...
BVince Posted November 18, 2010 Author Share Posted November 18, 2010 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 More sharing options...
rosebleue Posted November 18, 2010 Share Posted November 18, 2010 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 More sharing options...
lgaignebet Posted November 25, 2010 Share Posted November 25, 2010 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 More sharing options...
Shogun Distribution Posted December 12, 2010 Share Posted December 12, 2010 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 More sharing options...
BVince Posted December 13, 2010 Author Share Posted December 13, 2010 Bonjour,dans le cas des TPL front Office, il se peut que Smarty y soit pour quelque chose, je te conseillerai de vider le cache de smarty avant de faire d'autres modifications.... Link to comment Share on other sites More sharing options...
Shogun Distribution Posted December 13, 2010 Share Posted December 13, 2010 BonsoirJ'ai suivi ton conseil... et bien ça change rien.J'avais un espoir...MerciAh si, pardon, je m'y prenais mal.Il faut vider le cache juste avant d'envoyer le nouveau fichier et ça marche.Enfin ! Je n'y croyais plus !Un grand merci à toi. Link to comment Share on other sites More sharing options...
BVince Posted December 15, 2010 Author Share Posted December 15, 2010 Finalement, tous est bien qui finit bien... bon courage pour la suite... Link to comment Share on other sites More sharing options...
Shogun Distribution Posted December 15, 2010 Share Posted December 15, 2010 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 More sharing options...
jerecab Posted January 7, 2011 Share Posted January 7, 2011 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.phpEst ce que quelqu'un aurait une piste à me donner?Merci Link to comment Share on other sites More sharing options...
jerecab Posted January 7, 2011 Share Posted January 7, 2011 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 More sharing options...
Max2Crea Posted January 21, 2011 Share Posted January 21, 2011 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 More sharing options...
frmat Posted February 23, 2011 Share Posted February 23, 2011 Bonjour,Est-ce que je peux ajouter un champ "adresse e-mail" dans le formulaire d'ajout d'adresse de livraison avec cette méthode ?en modifiant le fichier adress.tpl et classes/Adress.php si j'ai bien compris ? Link to comment Share on other sites More sharing options...
frmat Posted February 24, 2011 Share Posted February 24, 2011 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_customerRéaliser sur prestashop 1.3.6 Link to comment Share on other sites More sharing options...
SharkOverFlow Posted March 3, 2011 Share Posted March 3, 2011 Bonjour,Juste une question.Que se passe t'il si j'effectue ces modifications et qu'ensuite nous voulons faire une maj de prestashop ? Link to comment Share on other sites More sharing options...
Broceliande Posted March 3, 2011 Share Posted March 3, 2011 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 More sharing options...
sophie30 Posted April 14, 2011 Share Posted April 14, 2011 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 More sharing options...
krixto Posted April 27, 2011 Share Posted April 27, 2011 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 fonctionneEDIT 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 More sharing options...
Edern Posted May 7, 2011 Share Posted May 7, 2011 C'est top!Merci BVince pour ce tuto très bien fait.Pour ceux qui se demandent, ça fonctionne parfaitement sur PrestaShop 1.4 ! Link to comment Share on other sites More sharing options...
NiniLe Posted May 13, 2011 Share Posted May 13, 2011 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 More sharing options...
soonn Posted June 6, 2011 Share Posted June 6, 2011 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 More sharing options...
sortie21000 Posted June 8, 2011 Share Posted June 8, 2011 bonjourje suis dans l impasse j'ai suivi le tuto 3 fois au pied de la lettremais 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 More sharing options...
Prestalearner Posted June 13, 2011 Share Posted June 13, 2011 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: 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.' Link to comment Share on other sites More sharing options...
zeckis Posted June 24, 2011 Share Posted June 24, 2011 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? 1 Link to comment Share on other sites More sharing options...
Lilounette77 Posted July 5, 2011 Share Posted July 5, 2011 Un immense merci pour ce tutorial très bien expliqué !!! Il m'a permis d'ajouter plusieurs champs sans aucune difficulté.Encore merci ! Link to comment Share on other sites More sharing options...
frmat Posted July 5, 2011 Share Posted July 5, 2011 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_customerRé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 More sharing options...
frmat Posted July 6, 2011 Share Posted July 6, 2011 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_customerRé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 More sharing options...
bbgun91 Posted September 9, 2011 Share Posted September 9, 2011 Merci beaucoup pour ce tuto ! J'ai eu pas mal de mal à l'adapter à mon besoin, mais il m'a été d'une très grande aide car m'a donné les bases de réflexion. Merci encore ! Link to comment Share on other sites More sharing options...
bincmoi Posted October 28, 2011 Share Posted October 28, 2011 UN Trés grand Merci super le tuto m' a beaucoup aidé j'ai juste passe 2 jours avant de comprendre qu'il faut aller dans le dossier compile de smarty et supprimer le fichier qui comporte authentication dans son nom Link to comment Share on other sites More sharing options...
ChristopheS Posted November 29, 2011 Share Posted November 29, 2011 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) Link to comment Share on other sites More sharing options...
WebARPCI Posted December 6, 2011 Share Posted December 6, 2011 - Link to comment Share on other sites More sharing options...
WebARPCI Posted December 6, 2011 Share Posted December 6, 2011 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 More sharing options...
hasniou Posted December 6, 2011 Share Posted December 6, 2011 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 More sharing options...
manue Posted December 28, 2011 Share Posted December 28, 2011 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 : 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 More sharing options...
cockpitinferno Posted December 29, 2011 Share Posted December 29, 2011 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) 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 More sharing options...
cockpitinferno Posted January 3, 2012 Share Posted January 3, 2012 un petit up, personne n'a de réponse? Link to comment Share on other sites More sharing options...
cockpitinferno Posted February 4, 2012 Share Posted February 4, 2012 up Link to comment Share on other sites More sharing options...
hrbhot Posted March 17, 2012 Share Posted March 17, 2012 Merci, c'etait tres interessant pour moi. super utile ! Link to comment Share on other sites More sharing options...
jujutte24 Posted March 18, 2012 Share Posted March 18, 2012 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 More sharing options...
GhosToM Posted May 14, 2012 Share Posted May 14, 2012 (edited) 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 May 15, 2012 by GhosToM (see edit history) Link to comment Share on other sites More sharing options...
locean67 Posted May 25, 2012 Share Posted May 25, 2012 (edited) Bonjour, je remercie chaleureusement Bvince et GhosToM pour ce tutoriel et optimisation. Sa faisait pas mal de temps que je cherchais comment faire Edited May 25, 2012 by locean67 (see edit history) Link to comment Share on other sites More sharing options...
locean67 Posted May 25, 2012 Share Posted May 25, 2012 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 More sharing options...
locean67 Posted May 25, 2012 Share Posted May 25, 2012 (edited) 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 : Un compte existe déjà avec cette adresse e-mail 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 May 25, 2012 by locean67 (see edit history) Link to comment Share on other sites More sharing options...
GhosToM Posted May 27, 2012 Share Posted May 27, 2012 (edited) Salut, hmmm... bizarre ces erreurs... as-tu pensé à recompiler Smarty et désactiver le cache le temps de faire les modifs de code ? Edited May 27, 2012 by GhosToM (see edit history) Link to comment Share on other sites More sharing options...
locean67 Posted May 29, 2012 Share Posted May 29, 2012 (edited) 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 May 29, 2012 by locean67 (see edit history) Link to comment Share on other sites More sharing options...
GhosToM Posted May 29, 2012 Share Posted May 29, 2012 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+ 1 Link to comment Share on other sites More sharing options...
Misfortune Posted June 6, 2012 Share Posted June 6, 2012 (edited) 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 June 6, 2012 by Misfortune (see edit history) Link to comment Share on other sites More sharing options...
Misfortune Posted June 8, 2012 Share Posted June 8, 2012 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 More sharing options...
delpiero Posted June 11, 2012 Share Posted June 11, 2012 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 More sharing options...
Misfortune Posted June 12, 2012 Share Posted June 12, 2012 (edited) Salut, si j'ai bien compris seul la ligne de code : ligne 90/100 du fichier customer.php protected $fieldsRequired = array('lastname', 'passwd', 'firstname', 'email'); rend un champ obligatoire, tu as bien vérifié ça ? Edited June 12, 2012 by Misfortune (see edit history) Link to comment Share on other sites More sharing options...
delpiero Posted June 12, 2012 Share Posted June 12, 2012 Justement je n'ai pas mis le champ fax dans la variable $fieldsRequired, c'est pour cela qu'il y a imcompréhension total... Link to comment Share on other sites More sharing options...
yZ0 Posted June 22, 2012 Share Posted June 22, 2012 Comment après avoir ajouter le champs société, le faire figurer sur la facture? Link to comment Share on other sites More sharing options...
ben5back Posted September 6, 2012 Share Posted September 6, 2012 (edited) 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 September 6, 2012 by ben5back (see edit history) Link to comment Share on other sites More sharing options...
le'pti-reunionais974 Posted October 22, 2012 Share Posted October 22, 2012 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 .. et si quelqu'un avait la démarche pour cette version si je suis preneur .. Merci d'avance à tous Link to comment Share on other sites More sharing options...
FredCD Posted November 5, 2012 Share Posted November 5, 2012 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 Link to comment Share on other sites More sharing options...
cymp Posted November 17, 2012 Share Posted November 17, 2012 Salut tout le monde, Comment faire pour que ce champ SIRET soit dans le cookie et qu'on puisse y accéder par un truc du genre "$cookie->siret" ? Link to comment Share on other sites More sharing options...
Olivier CLEMENCE Posted November 20, 2012 Share Posted November 20, 2012 Merci pour ce super tuto qui m'a bien aidé. Je m'en suis inspiré pour ajouter un champs personnalisé aux adresses (et non pas aux clients). Du coup histoire de partager avec la communauté j'ai mis ma version du tuto en ligne ici Link to comment Share on other sites More sharing options...
Popo68 Posted January 9, 2013 Share Posted January 9, 2013 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 More sharing options...
CreaZion Web Posted January 9, 2013 Share Posted January 9, 2013 Bonjour Popo68, Est-ce que tu as réussi à appliquer ce tuto sur une boutique en version 1.5 ? Link to comment Share on other sites More sharing options...
Tchupa Posted January 19, 2013 Share Posted January 19, 2013 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 More sharing options...
FredCD Posted January 23, 2013 Share Posted January 23, 2013 @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 More sharing options...
Anthony Douchez Posted February 26, 2013 Share Posted February 26, 2013 "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 More sharing options...
cd85 Posted May 3, 2013 Share Posted May 3, 2013 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now