pouc Posted April 10, 2014 Share Posted April 10, 2014 (edited) Bonjour je voudrais savoir comment faire pour rendre le champs "birthday" obligatoire j'ai fais des recherches mais je n'ai trouvé que des solutions sur d'anciennes versions de prestashop. Je suis sur presta 1.5.6.1 Merci. Baptiste Edited April 30, 2014 by pouc (see edit history) Link to comment Share on other sites More sharing options...
pouc Posted April 28, 2014 Author Share Posted April 28, 2014 up!!=) Link to comment Share on other sites More sharing options...
Klaus Boutik Posted April 29, 2014 Share Posted April 29, 2014 Je ne pense pas que ce soit une bonne idée de rendre ce champ obligatoire. Un peu comme la saisie du téléphone... Tout cela est un frein à l'inscription et un risque d'abandon de panier ! Rien de pire qu'une alerte rouge pour faire fuir un client ! Donnez lui plutot l'envie de le faire en indiquant un texte en dessous du genre : "En Indiquant votre date de naissance, vous recevrez un coupon cadeau pour votre anniversaire" Après l'internaute est libre ou pas d'y souscrire... Link to comment Share on other sites More sharing options...
AC2ID Posted April 29, 2014 Share Posted April 29, 2014 Bonjour, Sur ce point, je partage l'avis de Klaus Boutik. Toutefois, pour répondre à votre question, la solution la plus simple est modifier la variable $definition du Model de la class Customer. Pour cela : Editer le fichier Customer.php dans le répertoire classes de votre Prestashop et recherche la déclaration de la variable $definition (ligne 157). Vous devez modifier la ligne 168 'birthday' => array('type' => self::TYPE_DATE, 'validate' => 'isBirthDate'), en ajoutant : , 'required' => true ce qui doit donner : 'birthday' => array('type' => self::TYPE_DATE, 'validate' => 'isBirthDate', 'required' => true), Enregistrer votre fichier et le contrôle avec message d'erreur doit normalement fonctionner. Vous restera à modifier vos .tpl pour rajouter la petit * qui indique que le champs est obligatoire. Pour info, cette modification est valable pour le FO comme pour le BO. Cdt Link to comment Share on other sites More sharing options...
AC2ID Posted April 29, 2014 Share Posted April 29, 2014 Petit oubli, de ma part, mais il est nécessaire de préciser les bonne pratiques. Ce genre de modification ne devrait pas être fait directement dans le fichier Customer.php du répertoire classes, mais dans une copie partielle de ce même fichier qui est à placer dans le répertoire override\classes. Tous les détails sur ces bonnes pratiques (en anglais) sur : http://doc.prestashop.com/display/PS15/Overriding+default+behaviors Link to comment Share on other sites More sharing options...
pouc Posted April 30, 2014 Author Share Posted April 30, 2014 Bonjour merci beaucoup pour ces précisions. J'en tiendrais informé mon boss. Le soucis est qu'en utilisant la solution de l'override du fichier Customer.php et en y apportant les modifications que vous m'avez suggérées, même avec une date valide la compte n'est pas créée et l’erreur :"date de naissance requise" apparaît toujours. Ensuite j'ai un problème avec le fichier authentication.tpl la moindre modification que je lui apporte n'est pas prise en compte, même en vidant le cache. Ce fichier dois bien être présent dans le dossier thème que j'utilise? Baptiste Link to comment Share on other sites More sharing options...
xav91 Posted April 30, 2014 Share Posted April 30, 2014 (edited) bonjour, j'ai adapté l'authentification de PS (version 1.6.0.5 dans mon cas) en y ajoutant 3 champs lors de l'inscription, 2 obligatoires et un non obligatoire. j'ai repris le tuto de BVince : "AJOUTER UN CHAMP OBLIGATOIRE AU FORMULAIRE D'INSCRIPTION" Par contre, je ne suis pas un connaisseur des bonnes pratiques, désolé si ce n'est pas corect, mais cela fonctionne. j'ai donc fait les modifs suivantes (pour un champs 'téléphone' obligatoire) : authentification.tpl dans mon dosier theme, j'ajoute <div class="required form-group"> <label for="telephone">{l s='Telephone'} <sup>*</sup></label> <input type="text" class="text" id="telephone" name="telephone" value="{if isset($smarty.post.telephone)}{$smarty.post.telephone}{/if}" /> </div> dans ma balise <form action="{$link->getPageLink('authentication', true)|escape:'html':'UTF-8'}" method="post" id="account-creation_form" class="std box"> {$HOOK_CREATE_ACCOUNT_TOP} <div class="account_creation"> <h3 class="page-subheading">{l s='Your personal information'}</h3> ....... derriere le mot de passe par exemple ensuite dossier classe, fichier Customer.php, j'ajoute ma variable /** @var string TELEPHONE */ public $telephone; et 'telephone' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 14), derriere public static $definition = array( 'table' => 'customer', 'primary' => 'id_customer', 'fields' => array( ensuite la requete SQL ALTER TABLE prefix_customer ADD `telephone` VARCHAR(15) NOT NULL ensuite la visu/modif dans son compte, fichier identity.tpl du dossier theme, j'ajoute le champs <div class="required form-group"> <label for="telephone" class="required"> {l s='Telephone'} </label> <input type="text" name="telephone" id="telephone" value="{$smarty.post.telephone}" /> </div> et la visu dans le BO : dossier controllers/admin, fichier AdminCustomersController.php j'ajoute mon champs editable dans la fonction renderform() array( 'type' => 'text', 'label' => $this->l('Telephone'), 'name' => 'telephone', 'required' => true, 'col' => '4', ), je pense que toutes ces modifs ne te seront pas utiles vu que ton champs existe déja (entre autre l'ajout à la table) mais j'espere que le déroulement détaillé t'aidera. Edited April 30, 2014 by xav91 (see edit history) 1 Link to comment Share on other sites More sharing options...
pouc Posted April 30, 2014 Author Share Posted April 30, 2014 C'est une des meilleures solutions je pense, merci beaucoup. Mais du coup mon patron à décidé de ne plus la rendre obligatoire mais simplement de mettre une phrase expliquant que l'on peut recevoir des bon de réduction le jour de son anniversaire. Mais j'avais quand même trouvé une demi-solution qui n'agissait que sur le FO: dans le fichier AuthController à copier dans override/controllers/front à la ligne 430 environ vous trouverez: $customer->birthday = (empty($_POST['years']) ? '' : (int)$_POST['years'].'-'.(int)$_POST['months'].'-'.(int)$_POST['days']); if (!Validate::isBirthDate($customer->birthday)) $this->errors[] = Tools::displayError('Invalid date of birth.'); et juste aprés collé ce bout de code. if ((!isset($customer->birthday))||((empty($customer->birthday)))) $this->errors[] = Tools::displayError('Required date of birth.'); Comme apparemment je n'en est plus besoins je ne sais pas si je dois mettre RESOLU ou pas. En tout cas merci pour votre aide!!=) Baptiste Link to comment Share on other sites More sharing options...
AC2ID Posted April 30, 2014 Share Posted April 30, 2014 Bonjour, Effectivement, dans ma solution que je vous est donnée dans mes précendes post, j'ai omis de préciser qu'il fallait également modifier le contrôleur de FO AuthController.php. Il faut rajouter dans la fonction processSubmitAccount() une ligne pour setter la variable birthday juste avant que ne soit exécuté la fonction validateController(). Ajouter la ligne en rouge ci-dessous (vers la ligne 419) juste avant la ligne en bleu. (En override c'est mieux) if ($error_phone) $this->errors[] = Tools::displayError('You must register at least one phone number.'); $customer->birthday = (empty($_POST['years']) ? '' : (int)$_POST['years'].'-'.(int)$_POST['months'].'-'.(int)$_POST['days']); $this->errors = array_unique(array_merge($this->errors, $customer->validateController())); // Check the requires fields which are settings in the BO $this->errors = $this->errors + $customer->validateFieldsRequiredDatabase(); Comme cela la solution que je vous ai proposée est complète et pourras vous servir à vous (même si vous n'en avez plus besoin) ou à d'autre. Cdt 1 Link to comment Share on other sites More sharing options...
Broceliande Posted April 30, 2014 Share Posted April 30, 2014 Je ferais de même que mes confrère en disant qu'il n'est pas de mise d'imposer la saisie de la date de naissance. De la communication comme suggéré plus haut suffit à inciter le client à entrer sa date de naissance ... ou pas. Si pas c'est que le client final ne souhaite simplement pas , pour un simple achat en ligne , donner autant d'informations. Pour le coup c'est un indice de conversion en baisse et pas de rein ... A toi de voir. Link to comment Share on other sites More sharing options...
lordbdp Posted November 30, 2014 Share Posted November 30, 2014 Je suis ok mais quand vous avez un site interdit aux mineurs je pense que cela doit être obligatoire d'imposer... 1 Link to comment Share on other sites More sharing options...
yvesima Posted December 22, 2014 Share Posted December 22, 2014 Hi Thanks for this post I ve seen for customer.php but i'm not sure about AuthController I've put the code if ($error_phone) $this->errors[] = Tools::displayError('You must register at least one phone number.'); / controle date de naissance obligatoire */ $customer->birthday = (empty($_POST['years']) ? '' : (int)$_POST['years'].'-'.(int)$_POST['months'].'-'.(int)$_POST['days']); $this->errors = array_unique(array_merge($this->errors, $customer->validateController())); Dans le fichier customer.php public static $definition = array( 'table' => 'customer', 'primary' => 'id_customer', 'fields' => array( 'secure_key' => array('type' => self::TYPE_STRING, 'validate' => 'isMd5', 'copy_post' => false), 'lastname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32), 'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32), 'email' => array('type' => self::TYPE_STRING, 'validate' => 'isEmail', 'required' => true, 'size' => 128), 'passwd' => array('type' => self::TYPE_STRING, 'validate' => 'isPasswd', 'required' => true, 'size' => 32), 'last_passwd_gen' => array('type' => self::TYPE_STRING, 'copy_post' => false), 'id_gender' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'), 'birthday' => array('type' => self::TYPE_DATE, 'validate' => 'isBirthDate', 'required' => true), PrestaShop doesn't say Birthday is required and record the customer Pleae have you an idea Thanks 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