Jump to content

date de naissance obligatoire à l'inscription


Recommended Posts

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

  1. Date de naissance est requis.

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

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:

  1. day
  2. month
  3. year

Donc si le controle se fait avant la construction le variable birthday.

Link to comment
Share on other sites

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

  • 4 months later...
  • 1 month later...

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 by lordbdp (see edit history)
Link to comment
Share on other sites

  • 4 weeks later...

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.');		
  • Like 1
Link to comment
Share on other sites

  • 5 weeks later...

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 by arnaudtda (see edit history)
Link to comment
Share on other sites

  • 1 month later...

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

  • 1 year later...
  • 3 years later...

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

Create an account or sign in to comment

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

Create an account

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

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...