Jump to content

Choisir son groupe à l’inscription [RESOLU]


manue
 Share

Recommended Posts

Bonjour à tous,

Je souhaiterais que mes clients puissent choisir leur groupe au moment de leur inscription.
J'ai créé mes groupes.
J'ai modifié authentification.tpl en mettant :


Vous êtes
<input type="radio" name="id_group" id="id_group6" value="6" {if isset($smarty.post.id_group) && $smarty.post.id_group == 6}checked="checked"{/if} />
Enseignant
<input type="radio" name="id_group" id="id_group7" value="7" {if isset($smarty.post.id_group) && $smarty.post.id_group == 7}checked="checked"{/if} />
Elève/étudiant
<input type="radio" name="id_group" id="id_group8" value="8" {if isset($smarty.post.id_group) && $smarty.post.id_group == 8}checked="checked"{/if} />
Particulier



j'ai modifié customer.php avec :
public $id_group = 1; /*groupe par defaut */

$fields['id_group'] = intval($this->id_group);
et
$row = array('id_customer' => intval($this->id), 'id_group' =>$this->id_group);
pour enregistrer le groupe ainsi récupéré.

J'obtiens tout le temps des erreurs, impossible d'enregistrer.

Vous avez une petite idée ?
Un grand merci d'avance pour votre aide.
prestashop 1.2.5

15455_SyjTc1P2j8w7RPIa0fBG_t

Share this post


Link to post
Share on other sites

Hello Manue bienvenue a toi tout d'abord.

Voila ce que je ferais :

1- Modifier ton authentication.tpl comme tu l'as fait.


2- Modifier Customer.add() (class Customer.php) :

public function add($autodate = true, $nullValues = true, $groupId=1)
   {
       $this->birthday = (empty($this->years) ? $this->birthday : intval($this->years).'-'.intval($this->months).'-'.intval($this->days));
       $this->secure_key = md5(uniqid(rand(), true));
       $this->last_passwd_gen = date('Y-m-d H:i:s', strtotime('-'.Configuration::get('PS_PASSWD_TIME_FRONT').'minutes'));
        $res = parent::add($autodate, $nullValues);
       if (!$res)
           return false;

       $row = array('id_customer' => intval($this->id), 'id_group' => $groupId);
       return Db::getInstance()->AutoExecute(_DB_PREFIX_.'customer_group', $row, 'INSERT');
   }



3- Modifier enfin authentication.php ainsi (ligne 86 chez moi)

$customer->active = 1;
               if (!$customer->add(true,true,Tools::getValue('id_group',1)))
                   $errors[] = Tools::displayError('an error occurred while creating your account');




et voilou !

Cdlt,
Pierre.

Share this post


Link to post
Share on other sites

vous avez sauvé ma journée !

A ouai quand meme ... ;)

Sinon pourrais tu mettre [RESOLU] devant le titre de ton sujet, histoire que quelqu'un qui cherche comme toi une solution de ce genre la trouve rapidement.

Merci par avance,

Cdlt,
Pierre.

Share this post


Link to post
Share on other sites

Petit problème quand même avec les catégories.
Donc mon client s'enregistre bien avec le groupe sélectionné, mais il ne voit plus aucune catégorie !
J'ai bien sûr modifié toutes les catégories en leur affectant tous les groupes.

Pour que ça fonctionne, il faut que le client soit au moins dans le groupe defaut.

D'ailleurs chose très étrange, quand je créé un client en BO et que je lui affecte un autre groupe, celui-ci n'est pas pris en compte (seul le groupe par défaut est enregistré en base). Il faut aller en modification du client, lui ré-affecter le groupe et là ça fonctionne (il a bien les 2 groupes).
-testé sur 2 site avec ps 1.2.5 et 1.2.4-

Donc, dans mon cas précis, je pense qu'il faut que je lui affecte systématiquement le groupe par défaut + celui qu'il a sélectionné... et je n'y arrive pas !

Encore un petit coup main, please...

Merci d'avance.

Share this post


Link to post
Share on other sites

J'ai pas (encore) cherché, mais y'a peut être des modules qui permettent la personnalisation des formulaires d'inscription (+ possibilité d'adhérer à un groupe) non ?


Juste un truc, si vous vous basez de la structure de code (authentification.tpl) de manue, faut changer ça :

{if isset($smarty.post.id_group) && $smarty.post.id_group 6} ---> en ça {if isset($smarty.post.id_group) && $smarty.post.id_group == 6}

(manquait les "==")



@manue : Ca fonctionne presque nickel chez moi, sauf lorsque que depuis l'administration on veut changer le groupe d'un client faisant partie du "groupe défaut" --> il se retrouve dans le groupe qu'on veut, mais reste dans le "groupe défaut" aussi. Mais c'est pas un gros soucis. Et à part ça tout marche.

Et si je change un id_groupe existant de la table ps_customer_group dans la Base de Donnée ça fonctionne il se met bien à sa place.

Par contre si j'ajoute "à la main" dans la BD un client dans la table ps_customer, il n'apparait pas ensuite dans la table ps_customer_group, à moins de le créer manuellement. A mon avis un script, lors de l'enregistrement se charge de le créer, donc si tu fais des import dans la Base de Donnée direct, fais le à deux endroits en reprenant le id_customer de la table ps_customer que tu met dans ps_customer_group

Mais bon, ajouter les clients dans la base de données sans passer par le système du site c'est bof car ça pose des soucis avec les mots de passes et security key

mais il ne voit plus aucune catégorie !
--> Ou ça ??



Thx.

Share this post


Link to post
Share on other sites

J'ai pas (encore) cherché, mais y'a peut être des modules qui permettent la personnalisation des formulaires d'inscription (+ possibilité d'adhérer à un groupe) non ?


Côté BO oui, mais pas côté FO.


Juste un truc, si vous vous basez de la structure de code (authentification.tpl) de manue, faut changer ça :

{if isset($smarty.post.id_group) && $smarty.post.id_group 6} ---> en ça {if isset($smarty.post.id_group) && $smarty.post.id_group == 6}

(manquait les "==")



Exact, c'était bon dans mon code, mauvais copier/coller


@manue : Ca fonctionne presque nickel chez moi, sauf lorsque que depuis l'administration on veut changer le groupe d'un client faisant partie du "groupe défaut" --> il se retrouve dans le groupe qu'on veut, mais reste dans le "groupe défaut" aussi. Mais c'est pas un gros soucis. Et à part ça tout marche.

Et si je change un id_groupe existant de la table ps_customer_group dans la Base de Donnée ça fonctionne il se met bien à sa place.

Par contre si j'ajoute "à la main" dans la BD un client dans la table ps_customer, il n'apparait pas ensuite dans la table ps_customer_group, à moins de le créer manuellement. A mon avis un script, lors de l'enregistrement se charge de le créer, donc si tu fais des import dans la Base de Donnée direct, fais le à deux endroits en reprenant le id_customer de la table ps_customer que tu met dans ps_customer_group

Mais bon, ajouter les clients dans la base de données sans passer par le système du site c'est bof car ça pose des soucis avec les mots de passes et security key


Hors de question pour moi d'ajouter les clients directement en base !

Je suis d'accord avec vous que lorsque je modifie un client via l'administration tout se passe bien.
Le problème se pose lors de sa création. D'ailleurs le groupe défaut n'est plus proposé (cf capture) et dans la table ps_customer_group seul le groupe défaut est enregistré et pas celui que j'ai coché !

Est-ce que vous avez le même comportement ?

Je voudrais que le client ai au moins le groupe par défaut + celui qu'il a sélectionné lors de son inscription, car s'il n'a pas le groupe par défaut, sur le site, les catégories de produits (menu gauche chez moi) ne s'affichent plus lorsqu'il est loggué (alors que les catégories sont bien paramétrées : cf capture2).

Pour résumer :
Catégorie A -> tous les groupes
Client X -> groupe 1 (défaut), groupe 6 (Enseignant) : il voit bien les catégories de produits
mais,
Catégorie A -> tous les groupes
Client Y -> groupe 6 (Enseignant) uniquement : le client ne voit aucune catégorie

Bizarre, non ?

15516_reEOhlVLYKxOHGNb3wzz_t

15517_8gaegNilgyRQ4uGovjW3_t

Share this post


Link to post
Share on other sites

..ok javais mal compris je teste

EDIT: En effet, exactement le même problème chez moi.

j'y regarde...

et de son coté, si Yoya971 pourait nous apporter la modification dans le code à faire pour que :

lors de l'inscription l'internaute soit automatiquement enregistré dans le groupe client par défaut en plus du groupe sélectionné par l'internaute.

il aura une reconnaissance à vie.

Share this post


Link to post
Share on other sites

Hello
Au temps pour moi les amis : je connaissais cette 'subtilitée' mais j'ai zappé :)

Pour me rattrapper :

- virer les modifs faites à Customer.add() ... on doit donc retrouver çà :

public function add($autodate = true, $nullValues = true)
   {
       $this->birthday = (empty($this->years) ? $this->birthday : intval($this->years).'-'.intval($this->months).'-'.intval($this->days));
       $this->secure_key = md5(uniqid(rand(), true));
       $this->last_passwd_gen = date('Y-m-d H:i:s', strtotime('-'.Configuration::get('PS_PASSWD_TIME_FRONT').'minutes'));
        $res = parent::add($autodate, $nullValues);
       if (!$res)
           return false;

       $row = array('id_customer' => intval($this->id), 'id_group' => 1);
       return Db::getInstance()->AutoExecute(_DB_PREFIX_.'customer_group', $row, 'INSERT');

   }



- virer les modifs faites à authentication.php et ajouter çà :

               $customer->active = 1;
               if (!$customer->add()) // retour à la case départ ...
                   $errors[] = Tools::displayError('an error occurred while creating your account');
               else
               {
                   if(Tools::getValue('id_group',1)!=1) // on ajoute çà ...
                   {
                       $tmpGroup= new Group();
                       $tmpGroup->id=Tools::getValue('id_group',1);
                       $customer->addGroups($tmpGroup);
                   }



Voilou ...

Cdlt,
Pierre.

Share this post


Link to post
Share on other sites

Grand merci à vous 2... ça marche bien !!! :coolsmile:

Cela n'explique pas le non-enregistrement d'autres groupes lors de la création d'un client via l'administration... mais bon, mon problème à moi est maintenant bien RESOLU.

Manue (très reconnaissante pour votre aide).

Share this post


Link to post
Share on other sites

attends ... y'a un ptit soucis : sa le rajoute aussi au group 0 ...
donc voila :

if(Tools::getValue('id_group',1)!=1)
                   {
                       $tmpGroup[0]=Tools::getValue('id_group',1);
                       $customer->addGroups($tmpGroup);
                   }



.. beaucoup mieu :)

Pierre.

Share this post


Link to post
Share on other sites

Encore une chose :
Comment ajouter dans la fiche client (en front) le groupe client (ex. :vous êtes un particulier)
jpourais facilement ajouter ça en php, mais le fichier Identity.tpl ne semble pas reconnaitre le php...


et une autre question ne concernant pas directement ce prob:

Quel est le fichier dans lequel il est ordonné après validation du formulaire :
création du nouvel utilisateur avec son nom, prénom, email etc dans la table ps_customer

?

thx

Share this post


Link to post
Share on other sites

  • 4 months later...

allo
Bein moi il m'affiche les id à la place des textes et j'ai des 1 a la place des bouton ratios...
bon j'ai résolu le probleme qui venait du copier coller qui change les ".

quand le client fait un choix "professionnel", comment ajouter le champ siret et le rendre obligatoirement en fonction du choix ?

merci

Share this post


Link to post
Share on other sites

Effectivement, je n'ai pas pu rendre ce champ obligatoire malgré ma tentative de ré-utilisation du code pour ce type de champ !
Dans mon cas, ce n'est pas bien grave... mais si quelqu'un a une idée sur la question, elle sera la bienvenue.

Share this post


Link to post
Share on other sites

  • 2 months later...

Quelqu'un pourrait-il mettre son authentification.php modifié ? J'ai beau essayer, j'obtiens toujours une erreur "parse error" (certainement dû à une accolade qui traine ou pas fermée).

Merci...

[EDIT]
C'est bon pb résolu...

En revanche, l'ajout se fait bien, mais le groupe par défaut reste "Défaut". Du coup, les réductions applicable à chaque groupe ne sont pas prises en compte.

Exemple :
Le groupe 1 => Défaut
Le groupe 2 => -10%

Si une personne s'inscrit en tant que "groupe 2", il est également présent dans le "groupe 1". De ce fait, il n'a pas les -10%...Une idée ??

Share this post


Link to post
Share on other sites

Bonjour,

Je souhaiterais mettre en place la possibilité de choisir les groupes lors de l'inscription, seulement je souhaiterais un résumé plus clair de vos conversations pour ne pas faire d'erreurs... Prudence est mère de sureté héhéhé
En effet je ne sais déjà pas où se trouve Customer.add() donc cela est un peu gênant comme vous pouvez l'imaginer !
Cela dit je suis déjà très contente d'avoir trouvé un moyen de différencier les pro des particuliers.

Merci à celui ou celle qui pourra m'expliquer clairement la procédure à suivre.

Cordialement,

Caroline

Share this post


Link to post
Share on other sites

Quelqu'un pourrait-il mettre son authentification.php modifié ? J'ai beau essayer, j'obtiens toujours une erreur "parse error" (certainement dû à une accolade qui traine ou pas fermée).

Merci...

[EDIT]
C'est bon pb résolu...

En revanche, l'ajout se fait bien, mais le groupe par défaut reste "Défaut". Du coup, les réductions applicable à chaque groupe ne sont pas prises en compte.

Exemple :
Le groupe 1 => Défaut
Le groupe 2 => -10%

Si une personne s'inscrit en tant que "groupe 2", il est également présent dans le "groupe 1". De ce fait, il n'a pas les -10%...Une idée ??


Effectivement avec la version 1.3 cela ne semble plus marcher car le groupe principal prime. Cela marchait nickel sur 1.2.5
D'ailleurs si quelqu'un est capable d'adapter ce développement à la version 1.3, je suis preneur

Share this post


Link to post
Share on other sites

Je me réponds et sollicite l'approbation ou les remarques des vrais développeurs:

Dans la classe Group.php, j'ai remplacé ce bout de code de la version 1.3:

    static public function getReduction($id_customer = NULL)
   {
       if ($id_customer)
           $customer = new Customer(intval($id_customer));
       return Db::getInstance()->getValue('
       SELECT `reduction`
       FROM `'._DB_PREFIX_.'group`
       WHERE `id_group` = '.((isset($customer) AND Validate::isLoadedObject($customer)) ? intval($customer->id_default_group) : 1));
   }



Par celui de la version 1.2

static public function getReduction($id_customer)
   {
       $result = Db::getInstance()->getRow('
       SELECT g.`reduction`
       FROM `'._DB_PREFIX_.'group` g
       LEFT JOIN `'._DB_PREFIX_.'customer_group` cg ON (cg.`id_group` = g.`id_group`)
       WHERE g.`reduction` > 0 AND cg.`id_customer` = '.intval($id_customer).'
       ORDER BY g.`reduction` DESC');
       return $result['reduction'];
   }



Et là les réductions par groupe s'appliquent, je vais procéder aux tests, pour voir si ce changement provoque d'autres soucis.

Share this post


Link to post
Share on other sites

Il y a 3 fichiers concerné:

authentication.tpl -> \themes\prestashop
authentication.php -> (à la racine)
Customer.php -> \classes

1- En premier lieu il faut créer le groupe "Pro" par exemple...

2- Dans authentication.tpl il faut ajouter ca (vers la ligne 77):


Vous êtes
           <input type="radio" name="id_group_def" id="id_group2" value="2" {if isset($smarty.post.id_group) && $smarty.post.id_group == 6}checked="checked"{/if} />
Professionnel 
           <input checked type="radio" name="id_group_def" id="id_group1" value="1" {if isset($smarty.post.id_group) && $smarty.post.id_group == 8}checked="checked"{/if} />  
Particulier  



A noté que value="2" c'est l'id de votre groupe "pro" ca peut être autre chose, suivant le nombre de vos groupes.

3- Dans le fichier "authentication.php" ligne 90:

$groupId = $_POST['id_group_def'];



Puis toujours dans "authentication.php" ligne 102 à 105 remplacez par ca:

$customer->active = 1;
               if (!$customer->add(true,true,$groupId))
                   $errors[] = Tools::displayError('an error occurred while creating your account'); 
               else



4- dans le fichier "Customer.php" vers la ligne 114 cherchez cette fonction:

public function add($autodate = true, $nullValues....



Et remplacez la entièrement par celle la:

   public function add($autodate = true, $nullValues = true, $groupId)
   {
       $this->birthday = (empty($this->years) ? $this->birthday : intval($this->years).'-'.intval($this->months).'-'.intval($this->days));
       $this->secure_key = md5(uniqid(rand(), true));
       $this->last_passwd_gen = date('Y-m-d H:i:s', strtotime('-'.Configuration::get('PS_PASSWD_TIME_FRONT').'minutes'));
       $res = parent::add($autodate, $nullValues);
       if (!$res)
           return false;

       $row = array('id_customer' => intval($this->id), 'id_group' => $groupId);

       $result = Db::getInstance()->ExecuteS('UPDATE '._DB_PREFIX_.'customer SET id_default_group = '.$groupId.'  WHERE id_customer = '.intval($this->id));

       return Db::getInstance()->AutoExecute(_DB_PREFIX_.'customer_group', $row, 'INSERT');

   }



Et voila!

Bon il y a pas de p'tit à améliorer comme les input radio qui ce génére automatiquement en fonction des groupes créé..
Mais ca serra pour plus tard!

Attention ce hack est pour la version 1.3

Az

Share this post


Link to post
Share on other sites

  • 2 months later...

Bonjour,

Il y aurai une solution en plus de toutes la réponse précédente d'ajouter un champs obligatoire ex: siret quand le client choisi mon second groupe ex: pro, mais qu'il soit facultatif si le client choisi le groupe par défaut.

cordialement.

Share this post


Link to post
Share on other sites

  • 2 months later...

Bonjour, désolé de m'incruster ^^ mais y aurait -t- il moyen que les valeur de groupe qui s'affiche soit en fonction des nom des groupe dans le panneau administrateur (c'est à dire que cela ne soit pas figé) et de plus que le nombre de groupe proposé dépende du nombre de groupe dans l'admin, de même que cela ne soit pas changé, car le gérant ne touchera pas au fichier mais juste au panneau d'admin.

Merci de votre aide

Share this post


Link to post
Share on other sites

  • 3 weeks later...

Bonjour,

J'ai testé les différentes propositions de Yoya971 (sous presta 1.2.5), le choix du groupe s'affiche lors de l'inscription, mais le client se retrouve automatiquement dans le groupe par défaut dans mon BO, et du coup les catégories visibles que sous son groupe choisi ne s'affichent pas.

J'ai quasiment passé la journée dessus, et ne trouve vraiment pas la solution!!

Si vous avez une idée, elle sera la bienvenue!!
Merci d'avance


PS: ce que je recherche : mon client s'inscrit dans un groupe et est enregistré dans ce groupe dans mon BO.

Share this post


Link to post
Share on other sites

  • 1 month later...

les modifs marchent à une condition :

il faut remplacer ca sur la solution du haut

Professionnel 
           <input checked type="radio" name="id_group_def" id="id_group1" value="1" {if isset($smarty.post.id_group) && $smarty.post.id_group == 8}checked="checked"{/if} />  
Particulier



par ca

Professionnel 
           <input checked type="radio" name="id_group_def" id="id_group1" value="1" {if isset($smarty.post.id_group) && $smarty.post.id_group == [b]Votre id[/b]}checked="checked"{/if} />  
Particulier 

Share this post


Link to post
Share on other sites

  • 2 weeks later...

salut

jai tester la metode d ARZEL ca marche bien par contre

pourquoi quand je clique sur logout j arrive sur une page : monsite/category.php?id_category=8

et vu que jai pas acces a cette categorie jai un message d erreur

There is 1 error :

1. you do not have access to this category


je devrais retourner sur la page d autentification

merci de bien vouloir m aider

Share this post


Link to post
Share on other sites

  • 2 months later...

bonjour!
Est-ce que vous pouvez m'aider car je crois que c'est la meilleur piste de contourner ces problèmes d'affectation de groupe!
Je tourne sous prestashop 1.4 et les fichiers sont vraiment différents alors que ces codes la, ce les best
Est-ce qu'il y a quelqu'un qui pourra m'aider?
merci

Share this post


Link to post
Share on other sites

  • 1 month later...

Salut,

J'ai essayé d'effectuer cette modification, mais pour l'ajout d'un champs select (et non radio), cependant j'ai un soucis, lors de la validation du formulaire, j'ai une erreur:

Il y a 1 erreur :
une erreur s'est produite pendant la création de votre compte


mais le compte s'enregistre bien dans la table ps_customer, mais rien dans la table ps_address
Voici mon code:
authenticaption.tpl


Rayon de vente estimé (autour de votre ville)

-
5
10
15
20
25
30
35
40
45
50
55
60
65
70
75
80
85
90
95
100
105
110
115
120

*(valeurs en Km)


authentication.php ligne 90

       $rayon = $_POST['rayon'];




Class/Custormer.php ligne 76

           public      $rayon;



Class/Custormer.php ligne 80

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



Class/Custormer.php ligne 82-83

         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', 'dni' => 'isDni', 'rayon' => 'isUnsignedId');



Class/Custormer.php ligne 111

       $fields['rayon'] = pSQL($this->rayon);



Class/Custormer.php ligne 115-127

   public function add($autodate = true, $nullValues = true, $rayon)
   {
       $this->birthday = (empty($this->years) ? $this->birthday : intval($this->years).'-'.intval($this->months).'-'.intval($this->days));
       $this->secure_key = md5(uniqid(rand(), true));
       $this->last_passwd_gen = date('Y-m-d H:i:s', strtotime('-'.Configuration::get('PS_PASSWD_TIME_FRONT').'minutes'));
       $this->id_default_group = 1;
        $res = parent::add($autodate, $nullValues);
       if (!$res)
           return false;

       $row = array('id_customer' => intval($this->id), 'id_group' => 1, 'rayon' => $rayon);
       return Db::getInstance()->AutoExecute(_DB_PREFIX_.'customer_group', $row, 'INSERT');
   }




Class/Address.php ligne 76

           public      $rayon;



Class/Address.php ligne 81

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



Class/Address.php ligne 85-90

   protected    $fieldsValidate = array('id_customer' => 'isNullOrUnsignedId', 'id_manufacturer' => 'isNullOrUnsignedId',
                                       'id_supplier' => 'isNullOrUnsignedId', 'id_country' => 'isUnsignedId', 'id_state' => 'isNullOrUnsignedId',
                                       'alias' => 'isGenericName', 'company' => 'isGenericName', 'lastname' => 'isName',
                                       'firstname' => 'isName', 'address1' => 'isAddress', 'address2' => 'isAddress',
                                       'postcode' => 'isPostCode', 'city' => 'isCityName', 'other' => 'isMessage',
                                       'phone' => 'isPhoneNumber', 'phone_mobile' => 'isPhoneNumber', 'deleted' => 'isBool', 'rayon' => 'isUnsignedId');




Quelqu'un aurait une idée d'où ça provient?

Share this post


Link to post
Share on other sites

  • 3 weeks later...

Bonjour,

j'ai créé 2 groupes, l'un par défaut, le groupe des particuliers, l'autre groupe, le groupe des professionnels. Groupe 1 et Groupe 2

le hack signalé au-dessus est bon , mais j'ai mis kks heures à le mettre en place sous PS 1.4.0
voici la démarche:
dans le fichier /themes/autentification.tpl
vous ajouter le code suivant à la ligne 330:

 

Vous êtes
                        <input type="radio" name="id_group_def" id="id_group2" value="2" {if isset($smarty.post.id_group) && $smarty.post.id_group == 6}checked="checked"{/if} />
Professionnel
                        <input checked type="radio" name="id_group_def" id="id_group1" value="1" {if isset($smarty.post.id_group) && $smarty.post.id_group == 8}checked="checked"{/if} />
Particulier  



authentification.php ne doit pas être modifié mais bien le fichier maboutique.com/controllers/AuthController.php

à la ligne 88 vous ajoutez

$groupId = $_POST['id_group_def'];



dans le meme fichier à la ligne 160

$customer->active = 1;
if (!$customer->add())
$this->errors[] = Tools::displayError('An error occurred while creating your account.');
else


doit être remplacé par

$customer->active = 1;
          if (!$customer->add(true,true,$groupId))
          $this->errors[] = Tools::displayError('An error occurred while creating your account.');
           else



et puis vous remplacé le code à la ligne 145 du fichier /classes/custoer.php

public function add($autodate = true, $nullValues = true)
   {
       $this->birthday = (empty($this->years) ? $this->birthday : (int)($this->years).'-'.(int)($this->months).'-'.(int)($this->days));
       $this->secure_key = md5(uniqid(rand(), true));
       $this->last_passwd_gen = date('Y-m-d H:i:s', strtotime('-'.Configuration::get('PS_PASSWD_TIME_FRONT').'minutes'));
       if (empty($this->id_default_group))
           $this->id_default_group = 1; 
       if ($this->is_guest AND !Configuration::get('PS_GUEST_CHECKOUT_ENABLED'))
           return false;
        if (!parent::add($autodate, $nullValues))
           return false;

       $row = array('id_customer' => (int)($this->id), 'id_group' => (int)$this->id_default_group);
       return Db::getInstance()->AutoExecute(_DB_PREFIX_.'customer_group', $row, 'INSERT');
   } 


par celui-ci

    public function add($autodate = true, $nullValues = true, $groupId)
   {
       $this->birthday = (empty($this->years) ? $this->birthday : intval($this->years).'-'.intval($this->months).'-'.intval($this->days));
       $this->secure_key = md5(uniqid(rand(), true));
       $this->last_passwd_gen = date('Y-m-d H:i:s', strtotime('-'.Configuration::get('PS_PASSWD_TIME_FRONT').'minutes'));
       $res = parent::add($autodate, $nullValues);
       if (!$res)
           return false;

       $row = array('id_customer' => intval($this->id), 'id_group' => $groupId);

       $result = Db::getInstance()->ExecuteS('UPDATE '._DB_PREFIX_.'customer SET id_default_group = '.$groupId.'  WHERE id_customer = '.intval($this->id));

       return Db::getInstance()->AutoExecute(_DB_PREFIX_.'customer_group', $row, 'INSERT');

   }



voilà cela fonctionne chez moi et dans le FO et dans le BO
j'aimerais posé une question j'aimerais bien que le panier soit vidé quand c'est un professionnel qui vient de se logger et à déjà mis des produits dans son panier,

je sais que pour vider le panier c'est le code suivant:

$cart->delete();


mais il faut intérroger la base et mettre tout le code kk'un pourrait m'aider à ce sujet,
bon courage,

ornot

Share this post


Link to post
Share on other sites

  • 1 year later...
  • 3 months later...

très intéressant,

je tente cet aménagement sur mon PS 1.4.7.0 , mais j'ai un soucis qui ne doit pas être insurmontable.

je pense que cela provient de l'ID des groupes créés.

lorsque je valide le formulaire d'inscription en choisissant l'option professionnel le client est enregistre dans un groupe qui n'existe pas, si je regarde dans la BDD j'ai 0 en ID defaut group alors que dans la table group je n'ai que 1, 2 et 3 en IDgroup

 

un petit coup de pouce svp ?

Edited by graphismoweb (see edit history)

Share this post


Link to post
Share on other sites

  • 3 months later...

Bonjour,

 

Désolé de remonter ce vieux post, mais cela peut en intéresser certains.

 

Nous avons mis à jour notre module Account Group (presta 1.5) qui permet entre autre de donner le choix aux clients de choisir leur groupe à la création de leur compte, de pouvoir rendre le choix automatique ou modéré par un administrateur, recevoir des infos par mail...

 

N'hésitez à faire un tour sur la page du module, il y a une vidéo de démonstration qui montre l'admin, le front office, les mails qu'on peut recevoir, la validation de l'administrateur (back-office ou par mail).

 

Plus d'info sur la page web du module.

 

Cordialement,

 

Quentin

Share this post


Link to post
Share on other sites

  • 4 months later...

@qimzu

Dommage que votre module soit si cher, ça m'aurait intéressé pour la moitié du prix avec la moitié des fonctionnalités

 

@les_autres

Quelqu'un a trouvé une solution propre avec la récupération automatique des groupes existants en liste déroulante ?

Share this post


Link to post
Share on other sites

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

Pour la 1.6.x, il n'y a plus beaucoup de manips à faire (du moins, pas suffisamment pour justifier l'achat d'un module, à mon sens).

 

Pour faire ça proprement, overrider le fichier "controllers/front/AuthContoller.php" dans "override/controllers/front/AuthContoller.php" et remplacer la classe existante par :

class AuthController extends AuthControllerCore 

Puis, en dessous de $customer = new Customer(); (ligne 51), ajouter votre hack qui contient un test des champs "société" et "siret" et l'attribution du groupe sélectionné comme celui par défaut :

// Start multi-group hack //
$id_group = (Tools::getIsset('id_group')) ? Tools::getValue('id_group') : 1;
if($id_group == '4') {
    if(!Tools::getValue('company'))
        $this->errors[] = Tools::displayError('Merci de renseigner le nom de votre société.');
    else
        $customer->societe = $_POST['company'];
    if(!Tools::getValue('siret'))
        $this->errors[] = Tools::displayError('Merci de renseigner un numéro SIRET valide à 14 chiffres.');
    else
        $customer->siret = $_POST['siret'];

    $customer->id_default_group = $id_group;
}
// End multi-group hack //

Vous pouvez nettoyer le reste de la class en ne laissant que la fonction"protected function processSubmitAccount()" pour y voir un peu plus clair (environ 300 lignes).

 

Et dans le fichier authentication.tpl de votre thème :

<div class="radio-inline required radio">
    <input type="radio" name="id_group" id="id_group1" value="1" {if isset($smarty.post.id_group) && $smarty.post.id_group == '1'}checked="checked"{/if} checked/>
    <label for="id_group1">{l s='Particulier'}</label>
</div>

<div class="radio-inline required radio">
    <input type="radio" name="id_group" id="id_group4" value="4" {if isset($smarty.post.id_group) && $smarty.post.id_group == '4'}checked="checked"{/if} />
    <label for="id_group4">{l s='Professionnel'}</label>
</div> 

Et au besoin, le petit JS d'animation qui va bien, en fin de page du même fichier :

<script type="text/javascript" charset="utf8">
	if($('input#id_group4').is(':checked'))
	    $('.infosPro').show();
	else
	    $('.infosPro').hide();
		$('input[name=id_group]').change(function() {
	    if($(this).val() == '4' && !$('.infosPro').is(':visible'))
	        $('.infosPro').slideDown(300);
	    else
	        $('.infosPro').slideUp(300);
	});
	$('#submitAccount').click(function(){
		var certification=document.createElement('span');
		certification.innerHTML='{l s='Alert certification unchecked'}';
	    if($('input#id_group4').is(':checked') && !$('#infos_exactes').is(':checked')) {
	        alert(certification.innerHTML);
	        return false;
	    }
	});
</script> 

Voilà, comme j'y ai retouché à plusieurs fois, j'espère ne rien oublier.

 

Share this post


Link to post
Share on other sites

  • 5 months later...
  • 9 months later...

Salut,

avec la méthode de Klemart3D

Dés que je touche au AuthContoller.php, j'ai un écran blanc.

Je ne sais pas d'où vient l'erreur, synthaxe ou incompatibilité avec la dernière version de presta?

 

Merci de votre aide

Edited by Streize (see edit history)

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More