Jump to content

Rendre un champ supplémentaire obligatoire lors de l’inscription


Recommended Posts

Bonjour,
je souhaiterais rendre un des deux champs téléphone obligatoire (comme le nom ou prénom avec erreur si ça reste vide) lors de la création d'un compte mais je ne sais pas comment faire.
Si quelqu'un peut m'aider je lui en serait très reconnaissant.
Merci d'avance

Link to comment
Share on other sites

Bonjour

Pour rendre un des deux numéros obligatoires.

fichier themes/[mon theme]/authentification.tpl ligne 196



{l s='Home phone'}
 <input type="text" class="text" name="phone" id="phone" value="{if isset($smarty.post.phone)}{$smarty.post.phone|escape:'htmlall,UTF-8'|stripslashes}{/if}" />



devient



{l s='Home phone'}
 <input type="text" class="text" name="phone" id="phone" value="{if isset($smarty.post.phone)}{$smarty.post.phone|escape:'htmlall,UTF-8'|stripslashes}{/if}" />
*



ça a affiche une étoile devant le champ obligatoire.

Fichier /authentification.php ligne 51

    elseif (!@checkdate(Tools::getValue('months'), Tools::getValue('days'), Tools::getValue('years')) AND !(Tools::getValue('months') == '' AND Tools::getValue('days') == '' AND Tools::getValue('years') == ''))
       $errors[] = Tools::displayError('invalid birthday');


devient

    elseif (!@checkdate(Tools::getValue('months'), Tools::getValue('days'), Tools::getValue('years')) AND !(Tools::getValue('months') == '' AND Tools::getValue('days') == '' AND Tools::getValue('years') == ''))
       $errors[] = Tools::displayError('invalid birthday');
   elseif (!Tools::getValue('phone') AND !Tools::getValue('phone_mobile'))
       $errors[] = Tools::displayError('Please specify a least one phone number');



Pour faire la vérification.

  • Like 1
Link to comment
Share on other sites

Bonjour,

Voici une modif qui pourrait te permettre de faire ce que tu aimerais.

Il faut modifier le fichier classes/Address.php.

Au début de celui-ci tu devrais trouver ceci :

protected    $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'address1', 'postcode', 'city');



Il suffit (je pense, car je n'ai pas testé) d'ajouter le nom des champs pour les téléphone, et ça donne cela :

protected    $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'address1', 'postcode', 'city', 'phone', 'phone_mobile');



Voilà, maintenant les champs "Téléphone domicile" & "Téléphone portable" devraient être obligatoire.

Et pour faire encore mieux, on va modifier le template afin d'afficher la petite "*" à coté de ces deux champs.
Pour cela, on modifie le fichier themes/prestashop/authentication.tpl.

Tu devrais trouver ces lignes là :



{l s='Home phone'}
   <input type="text" class="text" name="phone" id="phone" value="{if isset($smarty.post.phone)}{$smarty.post.phone|escape:'htmlall,UTF-8'|stripslashes}{/if}" />



{l s='Mobile phone'}
   <input type="text" class="text" name="phone_mobile" id="phone_mobile" value="{if isset($smarty.post.phone_mobile)}{$smarty.post.phone_mobile|escape:'htmlall,UTF-8'|stripslashes}{/if}" />
*



Changes les comme ceci :



{l s='Home phone'}
   <input type="text" class="text" name="phone" id="phone" value="{if isset($smarty.post.phone)}{$smarty.post.phone|escape:'htmlall,UTF-8'|stripslashes}{/if}" />



{l s='Mobile phone'}
   <input type="text" class="text" name="phone_mobile" id="phone_mobile" value="{if isset($smarty.post.phone_mobile)}{$smarty.post.phone_mobile|escape:'htmlall,UTF-8'|stripslashes}{/if}" />
*



Voilà, j'espère que ça règlera ton problème.
Je n'ai pas du tout testé ces modifications, donc il est possible que ça ne fonctionne pas. Tiens moi au courant ;)

:exclaim: Lors d'une mise à jour de PrestaShop, ces deux fichiers seront écrasés et donc les modifs aussi.

EDIT : Ben ShagShag à été plus vite :D. Mais tu es certain Shag² qu'il ne faut pas modifier le tableau $fieldsRequired ?

  • Like 1
Link to comment
Share on other sites

@Pierre-Yves : je m'étais complètement planté dans ma réponse et du coup pendant que je corrigeai (ça fonctionne maintenant) vous avez répondu tout les 2.
En plus ta solution est plus propre et je la préfère à la mienne.

Bref je sors oubliez moi -->[]

EDIT : Par contre ta solution rend les 2 champs obligatoires et la mienne seulement l'un des deux comme mathmenet le voulait :P

Link to comment
Share on other sites

Merci Pierre-Yves, effectivement tout marche nikel
Pour ce qui du fichier classes/Address.php, j'ai juste mis le mobile phone en plus du reste.

Merci aussi à shagshag, l'idée était là! tu te rattraperas au prochain coup. ;-)

Merci de vos réponses si rapide.

Link to comment
Share on other sites

  • 2 weeks later...

Bjr:
Petite question ? la saisir de un numéro obligatoire me parais bien, ais si on mais un numéro quelconque ? ex. 0123456789 ?
Ou il faux rendre obligatoire qq parametre base sur les numéros de téléphones ?
Question bête mais peux nous aider

Link to comment
Share on other sites

Salut,
je pense surtout que tous les pays non pas les mêmes numéros.
Tu peux mettre ton numéro au format international.
Donc je pense que c'est assez restrictif si tu commence à vérifier et analyser le numéro.
Juste analyser à la rigueur que ce sont bien des chiffres mais c'est tout. Ceci n'engage que moi.

Et sinon d'un point de vu technique je ne sais pas comment faire ! :-)

Link to comment
Share on other sites

Bonjour,

C'est très compliqué de fixer une règle sur un numéro de téléphone.
Par exemple tous ces numéros sont valides:

0123456789
7123456789 (opérateur différent)
(0)123456789
01.23.45.56.78.89
01-23-45-67-89
0 123-456-789
+33 123456789
+33 (0) 123 456 789

plus toutes les combinaisons possibles. et là on ne parle que des numéros français
en espagne : 963 326 426 : 9 chiffres
en belgique : 02 420 90 62 : 9 mais pas groupés pareil
usa : 1-800-275-2273 ou 1-800-APPLE
...

bref pas possible de faire une règle. d'habitude je laisse ce champ libre

Edit : grillé :)

Link to comment
Share on other sites

  • 2 weeks later...

Tu peux peut être demander le pays puis grâce au javaScript tu sélectionnes les règles spécifiques au pays.
En plus comme ça tu aura du temps pour créer les règles pour chaque pays et puis celui dont tu ne connais pas les règles tu ne vérifies pas.
Si par exemple on choisis france comme pays tu vérifies bien sur et on pourra pas mettre n'importe quoi.

Voila.

Link to comment
Share on other sites

  • 3 months later...

Salut à tous

Je détère le sujet !
J'ai le même besoin : rendre le champ phone_mobile obligatoire.

J'ai modifié la classe Address.php comme l'a préconisé Pierre-Yves, ainsi que les formulaires address.tpl & authentication.tpl.

Dans le cas où il s'agit d'une inscription, pas de problème, mais dans le cas où la fiche client a été créée AVANT la modification de la classe, ET dans le cas où cette fiche avait ce champ vide, Presta affiche une erreur "Hack Attemp' sur le lien 'mettre à jour mes adresse' de l'espace client.

Savez vous comment éviter ça ?

Merci

Link to comment
Share on other sites

J'ai une question tres bete :exclaim:
Pourquoi vous cherchez a rendre obligatoire un Nº de telephone :question:
encore, question bete de ma part.

Pour une raison toute bête :)
Je livre en main propre le soir même de la commande.
Un numéro de téléphone est apprécié lorsqu'il n'y a personne à l'adresse indiquée ;)

Ceci dit, cela n'empêche pas que Prestashop de dérailler sur les fiches créées avant la modification des champs obligatoires (telephones ou autres)
Link to comment
Share on other sites

Donc dans ton cas, je mettrais un texte informatif du genre:
"Pour un traitement optimal de votre commande et pour un bon déroulement de sa livraison, veuillez renseigner votre numéro de téléphone."
De plus, les CGV inclueront un paragraphe propre sur cet élement important de la livraison qui te protège en cas de problème de toute nature rencontré lors de la livraison et pour tout litige pouvant résulter d'une mauvaise indication du numéro.

Link to comment
Share on other sites

Donc dans ton cas, je mettrais un texte informatif du genre:
"Pour un traitement optimal de votre commande et pour un bon déroulement de sa livraison, veuillez renseigner votre numéro de téléphone."
De plus, les CGV inclueront un paragraphe propre sur cet élement important de la livraison qui te protège en cas de problème de toute nature rencontré lors de la livraison et pour tout litige pouvant résulter d'une mauvaise indication du numéro.


Merci, mais je ne demande pas d'information de type juridique, mais technique sur le message 'Hack Tempt' de Prestashop ;)
Link to comment
Share on other sites

Oui je sais bien, mais à défaut d'avoir une réponse technique au problème, ma précision peut être utile à d'autres pour faciliter les choses concernant l'utilité de donner son numéro de tél.
PS: et puis je n'avais pas suivi le sujet depuis le début, je l'ai pris en court de route sur un élément qui m'avait surpris.
Pour le hack, effectivement mes compétences techniques ne sont pas encore assez poussées car j'ai des développeurs qui font leur boulot et moi suis plus chef de projet qu'analyste-programmeur. Mais j'espère qu'il y aura une solution au problème ;)

Link to comment
Share on other sites

  • 4 weeks later...
Salut à tous

Dans le cas où il s'agit d'une inscription, pas de problème, mais dans le cas où la fiche client a été créée AVANT la modification de la classe, ET dans le cas où cette fiche avait ce champ vide, Presta affiche une erreur "Hack Attemp' sur le lien 'mettre à jour mes adresse' de l'espace client.

Savez vous comment éviter ça ?

Merci


je viens un peut en retard, mais je crois que ton problem "hack attempt" pourra etre reglé si tu rempli les champs manquants dans la table ps_address (phone et phone_mobile) par des tel bidon genre 555555555 dans la base de donné presta, utilise phpmyadmin pour ça.

si t'a deja regler le problem, n'hesite pas a partager ta solution.
Link to comment
Share on other sites

  • 5 weeks later...

In This sample the Phone and Mobile Phone are Require

Alter fileclasses/Address.php.

Find :

protected    $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'address1', 'postcode', 'city');



Replace :

protected    $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'address1', 'postcode', 'city', 'phone', 'phone_mobile');




In the template : themes/prestashop/authentication.tpl.

Find



{l s='Home phone'}
   <input type="text" class="text" name="phone" id="phone" value="{if isset($smarty.post.phone)}{$smarty.post.phone|escape:'htmlall,UTF-8'|stripslashes}{/if}" />



{l s='Mobile phone'}
   <input type="text" class="text" name="phone_mobile" id="phone_mobile" value="{if isset($smarty.post.phone_mobile)}{$smarty.post.phone_mobile|escape:'htmlall,UTF-8'|stripslashes}{/if}" />



replace :



{l s='Home phone'}
   <input type="text" class="text" name="phone" id="phone" value="{if isset($smarty.post.phone)}{$smarty.post.phone|escape:'htmlall,UTF-8'|stripslashes}{/if}" />
*



{l s='Mobile phone'}
   <input type="text" class="text" name="phone_mobile" id="phone_mobile" value="{if isset($smarty.post.phone_mobile)}{$smarty.post.phone_mobile|escape:'htmlall,UTF-8'|stripslashes}{/if}" />
*



Enjoy

Link to comment
Share on other sites

  • 3 months later...

Bonjour,

J'aimerais pouvoir changer le message d'erreur qui s'affiche lorsque le client veux oublie de remplir la case "état" (id_state").
Car afin d'optimiser mes frais de transport j'ai remplacer le mot "etat" par département. Mais si le client ne remplie pas la case département , prestashop lui dit qu'il manque l'"état" ce que le client ne peux pas compredre puisqu'il n'y a pas d'état en France ...

Dans cette discution on parle brievement de ceci
je n'arrive pas à trouver ces lignes, peut -être quel ont changer d'emplacement ?




Fichier /authentification.php ligne 51

    elseif (!@checkdate(Tools::getValue('months'), Tools::getValue('days'), Tools::getValue('years')) AND !(Tools::getValue('months') == '' AND Tools::getValue('days') == '' AND Tools::getValue('years') == ''))
       $errors[] = Tools::displayError('invalid birthday');


devient

    elseif (!@checkdate(Tools::getValue('months'), Tools::getValue('days'), Tools::getValue('years')) AND !(Tools::getValue('months') == '' AND Tools::getValue('days') == '' AND Tools::getValue('years') == ''))
       $errors[] = Tools::displayError('invalid birthday');
   elseif (!Tools::getValue('phone') AND !Tools::getValue('phone_mobile'))
       $errors[] = Tools::displayError('Please specify a least one phone number');



Pour faire la vérification.

Link to comment
Share on other sites

Bonjour,



Il suffit (je pense, car je n'ai pas testé) d'ajouter le nom des champs pour les téléphone, et ça donne cela :
protected    $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'address1', 'postcode', 'city', 'phone', 'phone_mobile'); 





J'ai suivi ces instruction pour rendre obligatoire le choix de l'état j'ai rajouter "id_stats" , cela marche très bien pour le client qui vit dans un pays avec des états , mais par contre tout les autre pays ne peuvent plus creer des compte car ils les oblige a choisir un etat alors qu'il en n'ont pas et que l'onglet état n'apparait même pas ... il marque just eune erreur lors de l'inscription "état obligatoire"


Je sais qu'il existe un fichier.javascript spécial pour les états peut-être que l'on peux le modifier pour rendre obligatoire ? ou alors quelqu'un à une autre idée ?

je met toujours le le code du fichier etat :

$(document).ready(function(){
   $('select#id_country').change(function(){
       updateState();
   });
   updateState();
});

function updateState()
{
   $('select#id_state option:not(:first-child)').remove();
       var states = countries[$('select#id_country').val()];
       if( typeof(states) != 'undefined' )
       {
           for (indexState in states)
           {
               //ie bug fix
               if (indexState != 'indexOf')
                   $('select#id_state').append(''+states[indexState]+'');
           }
           $('p.id_state:hidden').slideDown('slow');
       }
       else
           $('p.id_state').slideUp('fast');
}

Link to comment
Share on other sites

  • 4 weeks later...

Hello à tous

J'ai bien réussi à modifier le formulaire pour rendre le téléphone obligatoire à l'inscription (plutot que domicile ou portable, dans l'admin/outils/traductions, j'ai changé par Téléphone (1) et Téléphone (2) et ai rendu uniquement le téléphone (1) obligatoire car tout le monde n'a pas un portable, et tout le monde n'a pas de ligne fixe)

Mon problème : Un message d'erreur est affiché lorsque l'on rentre plus de 16 caractères (or avec les préfixes internationaux, on y arrive très vite.)

Pouvez vous me dire ou aller modifier ce paramètre?

Merci d'avance

Link to comment
Share on other sites

  • 1 month later...

oscardiop :

Dans ton répertoire theme ( celui que tu utilise) tu ouvre le fichier authentication.tpl avec un éditeur de code et à la ligne 170 tu commentes ou supprime le code suivant :

        p class="required text">
{l s='Postal code / Zip code'}
               <input type="text" class="text" name="postcode" id="postcode" value="{if isset($smarty.post.postcode)}{$smarty.post.postcode}{/if}" />
*



Ensuite dans ton fichier Adress.php ( dossier classe)

A la ligne 80

tu modifie cette ligne :

protected    $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'address1', 'postcode', 'city', 'phone', 'birthday');



Qui gère les champs requis ( attention ceux posté ne sont pas les même que les tient car j'ai modifié pour ma boutique

et tu supprime

, 'postcode'



Voilà ça devrait être bon le code postal ne sera plus requis à l'inscription.

Cordialement,

Link to comment
Share on other sites

  • 1 month later...

Bonjour,
Un petit ajout au message de "shagshag" en page 1
En effet lorsque le client veut modifier son adresse, il n'y a pas d' astérix (*) devant le N° de tél (domicile)
Ds le fichier : address.tpl (prestashop/themes)

remplacer (ligne 78) :

        

{l s='Home phone'}
           <input type="text" id="phone" name="phone" value="{if isset($smarty.post.phone)}{$smarty.post.phone}{else}{$address->phone|escape:'htmlall':'UTF-8'}{/if}" />


par :

    

{l s='Home phone'}
           <input type="text" id="phone" name="phone" value="{if isset($smarty.post.phone)}{$smarty.post.phone}{else}{$address->phone|escape:'htmlall':'UTF-8'}{/if}" />
*


Idem pour le tél mobile en dessous

Link to comment
Share on other sites

  • 2 weeks later...
  • 4 weeks later...
J'ai une question tres bete :exclaim:
Pourquoi vous cherchez a rendre obligatoire un Nº de telephone :question:
encore, question bete de ma part.

Enfin, une question à laquelle je peux apporter une réponse !!!
Ton client peut se tromper d'adresse mail (faute de frappe dans l'adresse et alors le client ne peut plus se connecter à son compte), tu peux avoir besoin de le contacter au sujet d'un suivi de stock, il est important que celui-ci puisse être joignable .
C'est important également que celui-ci ait un n° de téléphone visible pour pouvoir te contacter en cas de besoin, c'est aussi çà la fidélisation.
J'espère t'avoir aidée en tout cas
Link to comment
Share on other sites

Bonjour,

J'ai essayé de rendre un champ obligatoire avec les méthodes citées et donc pas de problème.
Merci au passage pour la méthode.

Mon problème est que je souhaite mettre aussi la date de naissance obligatoire car il s'agit d'une vente de vins.
Dans le fichier classes/Address.php, j'ai rajouté 'years'

protected    $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'address1', 'postcode', 'city', 'phone', 'years'); 



Et dans le fichier themes/prestashop/authentication.tpl j'ai rajouté required au début de la balise :


{l s='Birthday'}

-
                                       {foreach from=$days item=day}
{$day|escape:'htmlall':'UTF-8'}$
                                       {/foreach}



Au final je recois le message d'erreur suivant lors de l'inscription :
Tentative de piratage (Address -> years is empty)

Quelqu'un saurait d'où vient le problème ?

Merci d'avance de votre aide.

Link to comment
Share on other sites

  • 1 month later...

Bonsoir,

j'ai bien appliqué la méthode pour le téléphone obligatoire et ça marche bien.

J'ai aussi ajouté la date de naissance obligatoire, mais ça fonctionne pas pareil, j'ai le même bug que le post précédent et j'ai un pb de traduction (voir image jointe), je sais où les traduire dans l'admin : traduction->nom des champs->Address, mais le pb c'est que je n'ai pas le champ birthday ou days/months/years si j'ajoute ces mots dans classes/Address.php à protected $fieldsRequired = array.

Merci d'avance pour votre aide.

13477_YduHdP6jYyY16p0TxVkO_t

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour
avec la nouvelle version de presta dans les fichiers adress et authentification je ne retrouve pas cette ligne pour rendre obligatoire par vérification

protected    $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'address1', 'postcode', 'city', 'phone', 'birthday'); 




donc comment faire pour retrouver cela et permettre l'oblgation car pour ma part ses "company" & "other" que je souhaite obligatoire

merci de cette mise à jour

Link to comment
Share on other sites

  • 5 weeks later...

Bonjour et merci pour ce forum qui m'aide beaucoup pour mes début sur Prestashop

De mon côté je voudrais rendre obligatoire la date de naissance pour pouvoir des cadeaux aux anniversaires de mes clients.
J'utilise la Version 1.2.5.0.
Je pense avoir repéré dans le fichier authentification.tpl la partie du code à modifier, mais sans pour autant savoir quoi faire :


{l s='Birthday'}

-
{foreach from=$days item=day}
{$day|escape:'htmlall':'UTF-8'}  
{/foreach}

{*
{l s='January'}
{l s='February'}
{l s='March'}
{l s='April'}
{l s='May'}
{l s='June'}
{l s='July'}
{l s='August'}
{l s='September'}
{l s='October'}
{l s='November'}
{l s='December'}
*}

-
{foreach from=$months key=k item=month}
{l s="$month"} 
{/foreach}


-
{foreach from=$years item=year}
{$year|escape:'htmlall':'UTF-8'}  
{/foreach}



Dans le fichier Address.php à la ligne :

protected $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'address1', 'postcode', 'city');

comment puis-je ajouter le bon code ?

Merci pour votre aide
Link to comment
Share on other sites

  • 1 month later...

pour rendre la date d'anniverssaire obligatoire:

Dans le fichier tpl:


{l s='Birthday'}

-
{foreach from=$days item=day}
{$day|escape:'htmlall':'UTF-8'}  
{/foreach}

{*
{l s='January'}
{l s='February'}
{l s='March'}
{l s='April'}
{l s='May'}
{l s='June'}
{l s='July'}
{l s='August'}
{l s='September'}
{l s='October'}
{l s='November'}
{l s='December'}
*}

-
{foreach from=$months key=k item=month}
{l s="$month"} 
{/foreach}


-
{foreach from=$years item=year}
{$year|escape:'htmlall':'UTF-8'}  
{/foreach}

*


dans le fichier .php .138:
protected $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'address1', 'postcode', 'city', 'phone', 'birthday');
Link to comment
Share on other sites

authentication.tpl:
Bon ok ca ne s'affiche! mais il faut mettre "required" apres le p class= et rajouter l "*" a la fin et c'est ok



{l s='Birthday'}

-
{foreach from=$days item=day}
{$day|escape:'htmlall':'UTF-8'}  
{/foreach}

{*
{l s='January'}
{l s='February'}
{l s='March'}
{l s='April'}
{l s='May'}
{l s='June'}
{l s='July'}
{l s='August'}
{l s='September'}
{l s='October'}
{l s='November'}
{l s='December'}
*}

-
{foreach from=$months key=k item=month}
{l s="$month"} 
{/foreach}


-
{foreach from=$years item=year}
{$year|escape:'htmlall':'UTF-8'}  
{/foreach}

*

Link to comment
Share on other sites

  • 2 months later...

j ai installe la modif de pierre yves ca marche pour les nouveaux clients le champ tel est obligatoire mais si le client modifie ses coordonnées
il n est plus obligatoire et pour mon buisness ce champ doit etre obligatoire
quelqu un a la solution ? PDC

Link to comment
Share on other sites

Pour reprendre les différentes (et excellentes) remarques citées plus haut, voici une petite compilation des réponses "non techniques" à propos de ce sujet très particulier du n° de téléphone au moment de la commande.

Un numéro de téléphone ne doit pas être obligatoire.
Pensez juste à vos clients en liste rouge !
Vous n'allez pas perdre des ventes juste pour ça.

De plus, la législation française est claire à ce sujet.
(FranWeb, il faut que tu nous retrouves l'article en question)

Dans tout les cas, affichez un texte informatif du style : “Pour un traitement optimal de votre commande et pour un bon déroulement de sa livraison, veuillez renseigner votre numéro de téléphone.”. De plus, les CGV devront inclure un paragraphe propre sur cet élément important de la livraison qui vous protège en cas de problème de toute nature rencontré lors de la livraison et pour tout litige pouvant résulter d’une mauvaise indication du numéro.

Si vous rendez les n° obligatoire et que vos clients ne souhaitent pas l'indiquer, vous allez vous récolter de nombreux numéro bidons du style 9999999999.

Tous les pays non pas les mêmes numéros. il faut alors indiquer un numéro au format international. Ceci est assez restrictif si après vérification, on refuse le numéro.
Au bout de combien de tentative, votre client va-t-il finir par se décourager et abandonner son panier ?

Link to comment
Share on other sites

dans le cas où on autorise le paiement bancaire par téléphone, je pense que le fait que l'utilisateur puisse mettre un numéro bidon affecte moins la vente que s'il oublie de renseigner le téléphone.

Link to comment
Share on other sites

Bonjour,

J'ai fait les modifications suivantes (voir ci-dessous) pour rendre obligatoire la date de naissance, cela fonctionne bien dans le frontoffice par contre dans le backoffice lors de la création d'un nouveau client ou de la modification d'un compte même si on saisie une date de naissance il met systématiquement : "le champ date de naissance est requis".
Je n'ai pas encore trouvé d'où cela peut venir, quelqu'un pourrait-il me donner une piste? Merci par avance.

Classes/Customers.php

protected     $fieldsRequired = array('lastname', 'passwd', 'firstname', 'email', 'birthday');
    protected     $fieldsSize = array('lastname' => 32, 'passwd' => 32, 'firstname' => 32, 'email' => 128, 'birthday' => 15);



Themes/Prestashop/authentification.tpl


{l s='Birthday'}

-
                   {foreach from=$days item=day}
{$day|escape:'htmlall':'UTF-8'}  
                   {/foreach}

               {*
                   {l s='January'}
                   {l s='February'}
                   {l s='March'}
                   {l s='April'}
                   {l s='May'}
                   {l s='June'}
                   {l s='July'}
                   {l s='August'}
                   {l s='September'}
                   {l s='October'}
                   {l s='November'}
                   {l s='December'}
               *}

-
                   {foreach from=$months key=k item=month}
{l s="$month"} 
                   {/foreach}


-
                   {foreach from=$years item=year}
{$year|escape:'htmlall':'UTF-8'}  
                   {/foreach}

*



Themes/Prestashop/identity.tpl


{l s='Birthday'}*

-
                   {foreach from=$days item=v}
{$v|escape:'htmlall':'UTF-8'}  
                   {/foreach}

               {*
                   {l s='January'}
                   {l s='February'}
                   {l s='March'}
                   {l s='April'}
                   {l s='May'}
                   {l s='June'}
                   {l s='July'}
                   {l s='August'}
                   {l s='September'}
                   {l s='October'}
                   {l s='November'}
                   {l s='December'}
               *}

-
                   {foreach from=$months key=k item=v}
{l s="$v"} 
                   {/foreach}


-
                   {foreach from=$years item=v}
{$v|escape:'htmlall':'UTF-8'}  
                   {/foreach}


Link to comment
Share on other sites

  • 2 weeks later...

Je comprends pas pourquoi une chose si simple ne soit pas disponible directement et qu'il faut s'amuser a bidouiller les codes, on se croirai dans oscommerce!

Ne me dites pas que c'est les loi française, parce que Prestashop n'est pas que pour la France a ce que je sache, une fonction a activé et désactivé dans le back office aurait été bien mieux. Et si les gens sont sur liste rouge, c'est pas grave, il donne leur numéro de portable ou mette un numéro bidon mais bon c'est tans pi pour eux.

Moi chronopost, dhl, ups me demande le numéro des clients, c'est pour leur bien aussi!

Bon je vais me jeter dans le code.

A+

Link to comment
Share on other sites

  • 2 weeks later...

Pour rendre la civilité obligatoire (v1.2.5.0) :

authentication.php ligne 55

    elseif (!Tools::isSubmit('id_gender'))
       $errors[] = Tools::displayError('Please specify your title');



classes/Customer.php ligne 73

     protected     $fieldsRequired = array('id_gender', 'lastname', 'passwd', 'firstname', 'email');



+

*

dans identity.tpl évidemment

Link to comment
Share on other sites

Salut à tous, j'ai un soucis,

J'ai ajouté dans les fichiers :

/classes/Address.php
/themes/xxx/authentication.tpl

un champ obligatoire supplémentaire : ntva

L'obligation de remplir ce nouveau champ fonctionne, mais une fois le formulaire passé je recois un message d'erreur :

Hack attempt (Address -> ntva is empty)

Pouvez vous m'aider ?

Link to comment
Share on other sites

  • 4 weeks later...

PRBLÈME et petites précisions pour les modifs concernant un champ obligatoire.

Par exemple : rendre le numéro de tel obligatoire :

J’ai fait les modifs dans les fichiers :/classes/Address.php, /themes/xxx/authentication.tpl

cette modif suffit pour une nouvelle inscription, MAIS si le client souhaite modifier une info (par exemple, il s'est trompé en entrant le numéro de tel) il faut AUSSI rendre ce champ obligatoire quand le client veut modifier son adresse !

Pour ce faire, il faut rajouter la petite étoile à côté du champs téléphone. On va alors chercher le fichier admin/tabs/AdminAddresses.php et à la ligne ligne 306 (version 1.3.x) on ajoute * :


'.$this->l('Home phone:').'


<input type="text" size="33" name="phone" value="'.htmlentities($this->getFieldValue($obj, 'phone'), ENT_COMPAT, 'UTF-8').'" /> *

Maintenant le champ "téléphone" est EGALEMENT obligatoire lorsque le client veut modifier son numéro de tel.



PROBLÈME :

Si vous avez fait la modif du champ "téléphone" obligatoire alors que vous aviez déjà des clients, il se peut que certains n'aient pas rempli le champ "téléphone" (qui n'était pas obligatoire). Dans ce cas, la modification de marche pas :-(

Tentative de piratage (Address -> phone is empty)

Quelqu'un a-t-il une solution ? (il faudrait un genre de script SQL qui remplace les numéros de tel qui sont vides par 0123456789 par éxemple...)
Link to comment
Share on other sites

Il suffirait peut être de lancer une requête SQL, ça me paraît être la meilleure solution :

UPDATE prefix_address SET phone = "0123456789" WHERE phone ="" OR ISNULL(phone)



et voilà...
ATTENTION : remplacer prefix par le préfixe que vous avez choisi lors de l'installation de Prestashop.

Link to comment
Share on other sites

Bonjour,
je c'est que le poste a 2ans lol ms je tente quand même ;o)

J'aimerais ajouter et rendre obligatoir un champ pour la TVA et un pour le Siret
Ms voila ms en suivant les explication pour le code en haut jy arrive pas... car celui-ci et pour les numero de téléphone.
J'espere avoir une réponse ;o)
Merci d'avance

Link to comment
Share on other sites

Bonjour FrenchMaster ,
Oui j'ai vu ce poste, ms leur explication ne fonctionne. L premier bout de code lui fonctionne très bien mais apres il donne simplement une commande.. et la je my connais pas assez pour faire la suite :/

Si un de vous pouvez m'aider et si possible par la grace me faire le code lol

Link to comment
Share on other sites

TUTORIAL "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.
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 :

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.

Link to comment
Share on other sites

Super le tuto !

Je viens de lemettre en oeuvre et ça marche du tonnerre !!!

Sauf que dans mon cas, l'ajout du champ doit être optionnel. En effet, je distingue le client pro du clien particulier justement par le fait qu'il renseigne ou non son numéro siret.
Ainsi, si le numéro siret est renseigné, (qu'il est bien numérique patati patala 14 chiffres), j'ai ajusté ma fonction add dans custome.php pour attribuer automatiqument le groupe client pro !

Bref, jusque là nickel !!

Sauf que lorsqu'un particulier s'enregistre, il ne met pas de numéro siret, et bien là, j'ai un joli message d'erreur :
01.une erreur s'est produite pendant la création de votre compte

Bien évidemment, je n'ai pas ajouté ma variable siret dans ma variable '$fieldsRequired', mais uniquement dans l vaiable '$fieldsSize', '$fieldsValidate' et bien évidemment dans ma fonction 'public function getFields()'

Il semblerait que le champ soit obligatoire et je ne sais pas comment le rendre optionnel...

Des idées ???

Mille merci !

Link to comment
Share on other sites

Ben je viens de trouver !!! En faisant un truk des plus tordu !!!! Dans ma fonction public getfiels, j'ai différencie selon si $this->siret est vide ou pas, alors soit
si c'est vide : $fields['siret'] = intval($this->siret);
et si c'est pas vide $fields['siret'] = pSQL($this->siret);

Bref un truk tordu comme j'en ai seul le secret !!!

Link to comment
Share on other sites

Il suffirait peut être de lancer une requête SQL, ça me paraît être la meilleure solution :

UPDATE prefix_address SET phone = "0123456789" WHERE phone ="" OR ISNULL(phone)



et voilà...
ATTENTION : remplacer prefix par le préfixe que vous avez choisi lors de l'installation de Prestashop.



Merci ça fonctionne nikel ;)
Link to comment
Share on other sites

  • 4 months later...

hola!
super, merci BVince.
Dites, en passant, quelqun sait comment contrôler la taille MINIMUM d'un champs ? Exemple simple : le téléphone -> signaler une erreur s'il fait moins de x caractères (j'me demande si c'est partout 8 mini... :).

++

Link to comment
Share on other sites

  • 6 months later...

Bonjour
j'ai le même besoin pour rendre un champ obligatoire (mon transporteur a besoin du télèphone pour prévenir les clients)
J'ai bien tenté la démarche de PY mais je n'ai pas les mêmes données dans ma page adress.tpl
Je suis donc bloquée...

Quelqu'un pourrait il m'aider, svp?

Link to comment
Share on other sites

  • 5 months later...

Bonjour, petit up du topic pour une question qui (je pense) s'inscrit dans l'esprit des "règles" comme pour le téléphone.

 

Je souhaiterais autorisé l'inscription à une boutique prestashop pour seulement quelques codes postaux à valider l'authentification.php (vente tres locale avec service de livraison rapide) mais je ne sais pas comment rajouter cette règle...

 

Quelqu'un saurait il celà et pourrait il m'y aider ?

 

Merci d'avance et dsl pour le up d'un vieuuuuux topic.

Link to comment
Share on other sites

Merci pour la réponse rapide.

C'est ce que je tente de faire, voici mon code :

 

" {elseif $field_name eq "postcode"

<p class="required select">

<label for="postcode">{l s='Zip / Postal Code'}</label>

<select name="postcode" id="postcode">

<option value="13001">13001</option>

<option value="13002">13002</option>

<option value="13003">13003</option>

<option value="13004">13004</option>

<option value="13005">13005</option>

<option value="13006">13006</option>

<option value="13007">13007</option>

<option value="13008">13008</option>

<option value="13009">13009</option>

<option value="13010">13010</option>

<option value="13011">13011</option>

<option value="13012">13012</option>

<option value="13013">13013</option>

</select>

<sup>*</sup>

</p>"

 

Mais cela ne fonctionne pas, ais-je fais une erreur ? dois je changer autre chose ailleur que dans mon template/montemplate/authentification.tpl ?

 

Encore merci.

Link to comment
Share on other sites

Il faut changer AuthController.php pour que les changement soient prises en compte. Pour cela je vous propose de prendre l'exemple de dropdown menu pour les mois et effectuer les changement requis (comme c'est fait pour le menu mois) dans les deux fichiers.

 

Bonne chance!

Link to comment
Share on other sites

Problème résolu grâce à komar62,

voici la solution :

{elseif $field_name eq "postcode"

<p class="required text">

<label for="postcode">{l s='Postal code / Zip code'}</label>

<select class="text" name="postcode" id="postcode" value="{if isset($smarty.post.postcode)}{

$smarty.post.postcode}{/if}" >

<option value="aucun">-----------</option>

<option value="62200">62200</option>

<option value="62280">62280</option>

<option value="62360">62360</option>

<option value="62480">62480</option>

<option value="62230">62230</option>

<option value="62126">62126</option>

<option value="62152">62152</option>

<option value="62187">62187</option>

<option value="62224">62224</option>

<option value="62930">62930</option>

</select>

<sup>*</sup>

</p>

 

 

Pour la 1.4, pour les antérieure sortir le {elseif $field_name eq "postcode"

 

Voila, un grand merci à vous.

 

Voyez vous un moyen (simple) pour restreindre l'achat de produits à une seule catégorie afin que le client ne puissent commander que dans une catégorie de produits par commande ?

 

Si le client veut commander dans deux catégories il faudrait qu il fasse 2 commandes distinctes...

Link to comment
Share on other sites

  • 3 months later...

Bonjour, je déterre le topic tuto comment rendre obligatoire la saisie du numéro de tél et pour amener ma réponse à la question mais pourquoi le rendre obligatoire ?

 

Tout simplement car nous avons été victimes de fraudes à la consignataire et qu'avec un numéro de téléphone nous pouvons prendre contact avec le client (de facturation ou d'expédition) pour demander si il est bien porteur de la cb etc...

Link to comment
Share on other sites

  • 1 year later...

Changes les comme ceci :


{l s='Home phone'}
<input type="text" class="text" name="phone" id="phone" value="{if isset($smarty.post.phone)}{$smarty.post.phone|escape:'htmlall,UTF-8'|stripslashes}{/if}" />


{l s='Mobile phone'}
<input type="text" class="text" name="phone_mobile" id="phone_mobile" value="{if isset($smarty.post.phone_mobile)}{$smarty.post.phone_mobile|escape:'htmlall,UTF-8'|stripslashes}{/if}" />
[sup]*[/sup]

 

Bonjour !

C'est vraiment super, j'ai testé et le téléphone est effectivement obligatoire à présent, mais je ne comprends pas la partie concernant l'astérisque rouge : quelle différence y a-t-il entre les deux séries de lignes ?

Je sais que ce fil est un peu vieux, mais ma version de Presta aussi. Vous risquez de pouvoir grandement m'aider.

Cheers!

R

Link to comment
Share on other sites

Bonjour,

 

Je remets ce topic à jour car moi aussi je souhaite avoir le numéro de téléphone de mes clients pour mon transporteur et je n'y arrive pas.

Bref je ne suis pas un as de l'informatique, j'ai prestasho 1.5.3.1, et quand je souhaite modifier mon fichier adresse.tpl ça ne marche pas.

 

Dans mon fichier j'ai:

 

<input type="text" class="text" name="phone" id="phone" value="{if isset($smarty.post.phone)}{$smarty.post.phone}{/if}" />

 

alors que dans ce topic il est écrit que la ligne à changer est:

 

<input type="text" class="text" name="phone" id="phone" value="{if isset($smarty.post.phone)}{$smarty.post.phone|escape:'htmlall,UTF-8'|stripslashes}{/if}" />

 

 

Et même si je change la ligne plus haut par celle proposée dans le topic je n'ai quand même pas l'étoile...

 

 

 

Ensuite pour ce qui est de l'obligation dans mon Address.php. je n'ai pas la ligne:

protected $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'address1', 'postcode', 'city');

 

 

Merci d'avance !

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

  • 1 month later...

Apres avoir lu l'intégralité de ce poste je n'ai malheureusement pas trouvé ma solution, car celle proposé ici sont adapté aux version 1.3 1.4? Mais je pense pas à la version 1.5.

 

J'essaye de rendre obligatoire la date de naissance.

 

J'ai donc ajouter dans class/customer ('required' => true, 'size' => 15)

  'birthday' =>	  array('type' => self::TYPE_DATE, 'validate' => 'isBirthDate', 'required' => true, 'size' => 15),

 

mais malgré cela et même quand la date est entrée.

 

J'ai le message:

l y a 1 erreur

Date de naissance est requis.

 

et impossible de valider le formulaire.

Link to comment
Share on other sites

  • 2 months later...
  • 3 months later...
  • 2 months later...

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