Jump to content

rajouter un champ pseudo dans le profil client


Recommended Posts

salut à tous,

tout d'abord merci beaucoup aux auteurs pour ce soft e-commerce que je trouve trés intuitif et trés bien fait.
Une demi journée d'installation et le truc commence déjà à rouler :-)

Pour ma part j'avais besoin de rajouter un champ dans le profil des clients, un champ pseudo pour faire le lien entre un forum et le shop.
En cherchant un peu je n'ai pas trouvé d'astuce toute faites, mais je vais quand même poster ma solution si toutefois cela peut intéresser du monde qui se trouve dans le même cas.

Tout d'abord dans votre table customers, vous devez rajouter un champ pseudo à la fin de la table.
ensuite les modifs

ouvrir themes/votre_thème/authentication.tpl
cherchez:

            

{l s='E-mail'}
               <input type="text" class="text" id="email" name="email" value="{if isset($smarty.post.email)}{$smarty.post.email}{/if}" />
*


aprés ajoutez:

            <!-- Rajout pour rendre le pseudo obligatoire -->


{l s='Pseudo'}
               <input  type="text" class="text" id="pseudo" name="pseudo" value="{if isset($smarty.post.pseudo)}{$smarty.post.pseudo}{/if}" />
*

<!-- Rajout pour rendre le pseudo obligatoire -->



Puis ouvrir classes/Customer.php
dans la class

class        Customer extends ObjectModel


ajoutez:

    /** Rajout  pour rendre le pseudo obligatoire */
/** @var string pseudo */
   public        $pseudo;
/** FIN Rajout pour rendre le pseudo obligatoire */



puis rajoutez votre champ pseudo pour le rendre obligatoire dans la ligne:

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


puis on définie une longueur:

protected     $fieldsSize = array('lastname' => 32, 'passwd' => 32, 'firstname' => 32, 'email' => 128, 'pseudo' => 50);


et la validation

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', 'pseudo' => 'isGenericName');



puis aprés:

$fields['newsletter'] = intval($this->newsletter);


rajoutez:

        /** Rajout  pour rendre le pseudo obligatoire */
       $fields['pseudo'] = pSQL($this->pseudo);
       /** FIN Rajout pour rendre le pseudo obligatoire */



enfin nous allons le faire afficher dans le profil du client:
ouvrir admin/tabs/AdminCustomers.php
cherchez:

            '.$this->l('Last visit:').' '.($customerStats['last_visit'] ? Tools::displayDate($customerStats['last_visit'], 1, true) : $this->l('never')).'    


remplacez par:

            '.$this->l('Last visit:').' '.($customerStats['last_visit'] ? Tools::displayDate($customerStats['last_visit'], 1, true) : $this->l('never')).'

           '.$this->l('Pseudo:').' '.sprintf($customer->pseudo).'    


et enfin on le rajoute dans l'édition/ajout d'un profil du panneau admin (volontairement je ne l'ai pas ajouté dans la partie client afin qu'il ne puisse pas le modifier sans notre accord, mais c'est un choix personnel qui est facilement modifiable)
pour cela dans la fonction juste avant:

'.$this->l('Birthday:').' ';


rajoutez:

                '.$this->l('Pseudo :').' 

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



Voilà.
je ne sais pas si cela sera utile ou bien si un tuto existe déjà mais si c'est le cas je ne l'ai pas trouvé, donc je donne l'astuce.

Edit: correction d'un petit bug lors de la modification de la fiche client.
j'ai un peu oublier de re-remplir la base en cas de modif. %-P
Donc voici.
ouvrir themes/votre_thème/identity.tpl
cherchez:

            

               <input type="checkbox" id="newsletter" name="newsletter" value="1" {if $smarty.post.newsletter == 1} checked="checked"{/if} />
{l s='Sign up for our newsletter'}


avant ajoutez:

            

{l s='Pseudo'} (Non modifiable)
               <input type="text" name="pseudo" id="pseudo" value="{$smarty.post.pseudo}" readonly/><br />
               Pour toute modification, veuillez contacter le webmaster.

Link to comment
Share on other sites

Il serait bon de mentionner la version de PS à laquelle ce code s'applique. Il ne sera peut-être pas compatible avec les futures versions.

ah ok pas de soucis ;)
la version PS est la 1.1.0.5

AU passage je ne l'ai pas fait en anglais mais si besoin est, demandez :)
Link to comment
Share on other sites

Au nom de la communauté : MERCI

avec plaisir, si ça peut aider ;)

Bon par contre j'ai modifié les modifs car il y avait un petit soucis, c'est à dire que le renvoi des infos si le client modifie son profil mettez à 0 le champ pseudo (ce qui est normal :-P )

du coup je fais afficher le pseudo pour le client mais en non modifiable comme ça cela ne change rien pour le membre
Link to comment
Share on other sites

  • 2 weeks later...

Many thanks for your job: is it possible to have the translation in English?
I think is very demanded by the community to know how rendering required a already existing field, or to add a new required field in the new account creation.

- Gianfranco

Link to comment
Share on other sites

Thank Gianfranco,

Ok so let's go for the translation (Sorry for the future spelling mistake ;) )

Hi everybody ;)

This trick add a required field during the registration, field that can be modify or not by the customers.
For this exemple, it's a field "pseudo" to link my shop and a forum.

First of all, you need to had a field "pseudo" at the end of the table "customers" with the same format of the other field.

So now let's go to the modifications in the code.

open themes/your_thème/authentication.tpl
Find:
            

{l s='E-mail'}
               <input type="text" class="text" id="email" name="email" value="{if isset($smarty.post.email)}{$smarty.post.email}{/if}" />
*


After add:

            <!-- Rajout pour rendre le pseudo obligatoire -->


{l s='Pseudo'}
               <input  type="text" class="text" id="pseudo" name="pseudo" value="{if isset($smarty.post.pseudo)}{$smarty.post.pseudo}{/if}" />
*

<!-- Rajout pour rendre le pseudo obligatoire -->



Open classes/Customer.php
In class

class        Customer extends ObjectModel


add:

    /** Rajout  pour rendre le pseudo obligatoire */
/** @var string pseudo */
   public        $pseudo;
/** FIN Rajout pour rendre le pseudo obligatoire */



then add you required filed "pseudo" in the following line, like this:

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


Now we defiine the length (I choose 50, it's enough for me)

protected     $fieldsSize = array('lastname' => 32, 'passwd' => 32, 'firstname' => 32, 'email' => 128, 'pseudo' => 50);


And the validation test:

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', 'pseudo' => 'isGenericName');



After this line:

$fields['newsletter'] = intval($this->newsletter);


add:

        /** Rajout  pour rendre le pseudo obligatoire */
       $fields['pseudo'] = pSQL($this->pseudo);
       /** FIN Rajout pour rendre le pseudo obligatoire */




Now we display the field in the admin panel (customers profil)
open admin/tabs/AdminCustomers.php
find:

            '.$this->l('Last visit:').' '.($customerStats['last_visit'] ? Tools::displayDate($customerStats['last_visit'], 1, true) : $this->l('never')).'    


replace with:

            '.$this->l('Last visit:').' '.($customerStats['last_visit'] ? Tools::displayDate($customerStats['last_visit'], 1, true) : $this->l('never')).'

           '.$this->l('Pseudo:').' '.sprintf($customer->pseudo).'    


and we also add the field in the add/edit part of the customers profil (sorry for the translation, I'm not really sure about the exact name of this part in the english shop)

For this, just before:

'.$this->l('Birthday:').' ';


add:

                '.$this->l('Pseudo :').' 

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



And finaly, we need to had this filed in the customers profil, because if he want to modify some informations, the field must be fill. (Please note that the customers cannot change this field, but only the administrators in the admin board. If you don't want this, just remove the readonly parameters)
open themes/your_thème/identity.tpl
find :

            

               <input type="checkbox" id="newsletter" name="newsletter" value="1" {if $smarty.post.newsletter == 1} checked="checked"{/if} />
{l s='Sign up for our newsletter'}


before add:

            

{l s='Pseudo'} (Non modifiable)
               <input type="text" name="pseudo" id="pseudo" value="{$smarty.post.pseudo}" readonly/><br />
               For any modification, please contact the adminisrtator.



And that's all folks ;)

I hope it's comprehensible for everybody
Link to comment
Share on other sites

  • 3 months later...

Excellent très utile, c ce que je cherchais.
Pour la version 1.1.5 ....

J'ai pas encore testé, vous croyez que pour la version 1.2.5 c'est valable aussi ??


l'équipe de développement de prestashop pourait penser à ajouter un module pour l'inscription (avec possibilité d'ajout de caractéristique et adhésion du client à un groupe au choix à l'inscription). (Peut-être ca existe déjà?)



encore merci

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,
merci pour ce sujet qui m'a beaucoup aidé. Après avoir ajouter des champs, je souhaiterais pouvoir les visualiser dans l'admin quand la liste des clients est affichée. Je réussis à afficher les champs mais pas les resultats qui ne sont pas en dessous pour reason_social et committee. Je précise que les champs sont bien enregistrer dans la base de donnée.




Merci à tous.

v1.2.0.5.

16101_mIQmOWj04GRI2Wnm9S2k_t

Link to comment
Share on other sites

  • 9 months later...

Bonjour à tous,

Le module kiala coute cher je trouve (avis perso)

Je pensais à ceci, lors de la finalisation de la commande, lorsque l’on vous demande l’adresse de livraison,
n’est il pas possible de proposer à l’acheteur : un lien vers le site kiala et qu’il choisisse le point kiala où il veut etre livré ?
Qu’il puisse choisir le transporteur, dans ce cas ce sera “kiala” et qu’il y aie une phrase d’info, disant :
“pour une livraison kiala, rendez vous sur ce lien….(le lien kiala) et ajouter une nouvelle adresse de livraison”, (qui sera le point kiala)

ou dans le profil du client ou lors de sa première inscription, créer un champ appelé “adresse Kiala” ou renommé le champ adresse (2) par “adresse Kiala) avec une petite phrase infos pour introduire une adresse kiala rendez vous sur le site…..

et cette adresse kiala apparaitra sur le bon de commande

merci

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