jd440 Posted May 14, 2013 Share Posted May 14, 2013 (edited) Je souhaiterais rendre obligatoire lors de l'inscription la date de naissance, Après une recherche sur le forum je suis tombé sur: http://www.prestasho...e-linscription/ Mais dans mon Bo (1.5.4.1) Dans clients > champs requis j'ai newsletter, opt-in mais rien d'autre. Pas de date de naissance d'ailleurs dans le BO de démo http://demo-bo.prest...f475f9e8f90ffc9 c'est idem! TEST 1 qui ne fonctionne pas: En éditant la class AdminCustomersControlle.php Je peux ajouter birthday dans $this->required_fields = array('newsletter','optin','birthday'); Je peux donc le cocher Mais du coup j'ai une erreur dans le forumlaire d'inscription que la date de naissance soit entrée ou non: Il y a 2 erreurs[list=1] [*][b]Date de naissance[/b] est requis. [*]Ce champ Date de naissance est obligatoire. [/list] Surprenant qu'il soit requis & obligatoire? TEST 2 qui ne fonctionne pas: En éditant la class AdminCustomersControlle.php Je peux ajouter required dans array( 'type' => 'birthday', 'label' => $this->l('Birthday:'), 'name' => 'birthday', 'options' => array( 'days' => $days, 'months' => $months, 'years' => $years ), 'required' => true ), résultat: si seul ne fonctionne pas. TEST 3 qui ne fonctionne pas: dans la class customer ajouter required sur le champ birthday: 'birthday' => array('type' => self::TYPE_DATE, 'validate' => 'isBirthDate', 'required' => true), mais dans le forumlaire et ce même s'y j'insc rit un date de naissance j'aiu le message d'erreur suivant: Il y a 1 erreur Date de naissance est requis. Edited May 14, 2013 by jd440 (see edit history) Link to comment Share on other sites More sharing options...
jd440 Posted May 14, 2013 Author Share Posted May 14, 2013 je me demande si ca pourrais pas avoir un rapport avec le faite que si l'on rend obligatoire "birthday" hors sur le formulaire on as: day month year Donc si le controle se fait avant la construction le variable birthday. Link to comment Share on other sites More sharing options...
jd440 Posted May 17, 2013 Author Share Posted May 17, 2013 Euh! perseonne ne souhaite les anniversaire? Link to comment Share on other sites More sharing options...
jd440 Posted May 18, 2013 Author Share Posted May 18, 2013 bon j'ai trouvé un solution. Je ne touche pas au classe. Mais un ovveridre de AuthController.php en ajoutant en l~395 $customer->birthday = (empty($_POST['years']) ? '' : (int)$_POST['years'].'-'.(int)$_POST['months'].'-'.(int)$_POST['days']); if ((!isset($customer->birthday))||((empty($customer->birthday)))) $this->errors[] = Tools::displayError('Required date of birth.'); Mais bon c'est pas top de passer par un tel override. Et je comprends pas pourquoi il n'est pas prévu, ou je n'arrive pas à mettre directement la date obligatoire. Si quelque as une idée. Link to comment Share on other sites More sharing options...
masera Posted October 1, 2013 Share Posted October 1, 2013 moi j'ai tout essaié tes suggestions, et rien ne marche je désespere Link to comment Share on other sites More sharing options...
lordbdp Posted November 9, 2013 Share Posted November 9, 2013 (edited) Pour moi ça fonctionne sur PS 1.5.4.1. Pour ajouter l'étoile (astérisque) pour le champs obligatoire : http://www.prestashop.com/forums/topic/57590-tutorial-devforever-ajouter-un-champ-obligatoire-au-formulaire-d%E2%80%99inscription/ Mais je ne comprend pas comment faire. Faut il modifier dans classes\ObjectModel.php protected $fieldsRequired = array(); par protected $fieldsRequired = array(birthday); Ou encore faire des modifications autrepart... Edited November 9, 2013 by lordbdp (see edit history) Link to comment Share on other sites More sharing options...
ShowYou Posted December 7, 2013 Share Posted December 7, 2013 Bonjour, Pour PS 1.5.6, Après $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.'); Ajoutez if ((!isset($customer->birthday))||((empty($customer->birthday)))) $this->errors[] = Tools::displayError('Required date of birth.'); 1 Link to comment Share on other sites More sharing options...
arnaudtda Posted January 6, 2014 Share Posted January 6, 2014 (edited) Perso sous prestasjop 1.5.4.1 j'ai trouvé une solution qui fonctionne : Dans classes/validate.php, transformer ligne 483 : public static function isBirthDate($date) { if (empty($date) || $date == '0000-00-00') return true; en public static function isBirthDate($date) { if (empty($date) || $date == '0000-00-00') return false; ainsi ce champs de vient obligatoire. Reste à ajouter l'astérisque dans authentication.tpl : <p class="select required"> <span>{l s='Date of Birth'} <sup>*</sup></span> Voilà. Edited January 6, 2014 by arnaudtda (see edit history) Link to comment Share on other sites More sharing options...
KevinNash Posted February 19, 2014 Share Posted February 19, 2014 Perso sous prestasjop 1.5.4.1 j'ai trouvé une solution qui fonctionne : Dans classes/validate.php, transformer ligne 483 : public static function isBirthDate($date) { if (empty($date) || $date == '0000-00-00') return true; en public static function isBirthDate($date) { if (empty($date) || $date == '0000-00-00') return false; ainsi ce champs de vient obligatoire. Reste à ajouter l'astérisque dans authentication.tpl : <p class="select required"> <span>{l s='Date of Birth'} <sup>*</sup></span> Voilà. Pour l'astérisque ça ne fonctionne pas pour moi en 1.5.4.1, pour que cela fonctionne j'ai du Remplacer <span>{l s='Date of Birth'}</span> Par <label>{l s='Date of Birth'} <sup>*</sup></label> Par contre l'astérisque est noir et pas rouge, une idée pour cela ? Link to comment Share on other sites More sharing options...
BoutikShop69 Posted November 4, 2015 Share Posted November 4, 2015 Bonjour, Est-ce qu'on peut utiliser cette méthode, sur les versions 1.6 de prestashop ? C'est une possibilité qui est pourtant nécessaire pour certains d'entre nous dans notre activité. Ca devrait pouvoir être prévu de l'activer ou non. Cordialement. Link to comment Share on other sites More sharing options...
DavidCKW Posted June 28, 2019 Share Posted June 28, 2019 Pour faire les choses proprement, il ne faut pas aller modifier les fichiers du core comme indiqué pour presta 1.5, car sinon dès que presta change de version, la modif est perdue. Pour prestashop 1.6, il faut aller voir dans le dossier override/classes -------------------------------------------- Si Validate.php existe déjà, alors à l'intérieur du code class Validate extends ValidateCore { } Rajouter le code : public static function isBirthDate($date) { if (empty($date) || $date == '0000-00-00') { return false; } if (preg_match('/^([0-9]{4})-((?:0?[1-9])|(?:1[0-2]))-((?:0?[1-9])|(?:[1-2][0-9])|(?:3[01]))([0-9]{2}:[0-9]{2}:[0-9]{2})?$/', $date, $birth_date)) { if ($birth_date[1] > date('Y') && $birth_date[2] > date('m') && $birth_date[3] > date('d') || $birth_date[1] == date('Y') && $birth_date[2] == date('m') && $birth_date[3] > date('d') || $birth_date[1] == date('Y') && $birth_date[2] > date('m')) { return false; } return true; } return false; } ------------------------------------------ Si Validate.php n'existe pas, alors le créer et mettre à l'intérieur le code suivant : <?php class Validate extends ValidateCore { public static function isBirthDate($date) { if (empty($date) || $date == '0000-00-00') { return false; } if (preg_match('/^([0-9]{4})-((?:0?[1-9])|(?:1[0-2]))-((?:0?[1-9])|(?:[1-2][0-9])|(?:3[01]))([0-9]{2}:[0-9]{2}:[0-9]{2})?$/', $date, $birth_date)) { if ($birth_date[1] > date('Y') && $birth_date[2] > date('m') && $birth_date[3] > date('d') || $birth_date[1] == date('Y') && $birth_date[2] == date('m') && $birth_date[3] > date('d') || $birth_date[1] == date('Y') && $birth_date[2] > date('m')) { return false; } return true; } return false; } } Ensuite, allez dans le dossier cache et supprimez le fichier class_index.php pour vider le cache et que la modification soit prise en compte. Après ça, prestashop bloquera si la date est vide. Ensuite pour rajouter l'astérisque (c'est juste visuel mais ça n'a pas de fonction bloquante), rajoutez <sup>*</sup> à côté de {l s='Date of Birth'} dans le fichier themes/MONTHEME/authentication.tpl 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