Jump to content

[RESOLU]Rendre obligatoire le champs "birthday"


Recommended Posts

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

  • 3 weeks later...

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

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

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

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

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

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

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

  • Like 1
Link to comment
Share on other sites

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

  • 7 months later...
  • 3 weeks later...

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

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