Ajouter des champs spécifiques dans l’inscription d’un nouveau client

amahi

Expert Magento chez S3i Business
Ahmed MAHI, Développeur/ intégrateur Magento depuis 2009 ( 6 ans de bonheur avec Magento :))

Des fois on a besoin d’avoir quelques informations supplémentaires sur nos clients par exemple : n° Siret, date de naissance… aujourd’hui donc on va essayer de voir comment ajouter des champs spécifiques dans le formulaire d’inscription des clients.

Voici la structure de notre petit module :
structure du module magento: attribut cleint

Sans oublier le fichier Mahigento_Newattcustomer.xml pour l’activation de notre nouveau module.
Premièrement on doit ajouter un nouvel attribut client :
Dans le fichier mysql4-install-0.1.0.php vous allez mettre :

Cela lors de l’installation du module va crée automatiquement l’attribut client “siret”.
attribut client backoffice  Magento
c’est fini avec le backoffice passons maintenant au front :)
Maintenant le frontOffice on ajoute notre champ dans le fichier templete il s’agit de : customer/form/register.phtml
On ajoute par exemple :


Puis il nous reste la partie traitement de la valeur du champ siret lors d’enregistrement du client, pour ça on a deux choix soit surcharger la méthode createPostAction() de la class Mage_Customer_AccountController ( ce que je préfère pas :) ) soit en utilisant un observer, on va utiliser la deuxième méthode.
Dans notre fichier de configuration :

et dans Observer.php:

Et voila maintenant on a le champ Siret ajouter dans le formulaire d’enregistrement et dans le backoffice Magento comme information supplémentaire du client.

Testé sur 1.4.1.0 et 1.4.1.1
Télécharger les fichiers

26 comments

    1. non cela ajoute seulement durant l’inscription du client pour ajouter pendant le checkout si par exemple on veut ajouter dans “Informations de facturation” on doit le mettre dans le fichier checkout/onepage/billing.phtml l’action correspond est saveBilling de la class Mage_Checkout_OnepageController donc on peut ajouter une condition supplémentaire dans notre méthode saveSiret de type

      pour avoir la valuer envoyé de notre champ……

  1. Merci pour ce magnifique tuto qui est fort utile et de surcroît fonctionne très bien.
    Cependant je souhaiterai de la même façon savoir comment procéder pour ajouter un 2ème champs “Société” dans le formulaire coté back-office. Je suis arrivé à moitié à l’afficher sur le front-office mais pas côté admin.

    Merci pour votre aide

    Cdt

    @li

    1. merci a vous :) en fait le champ société est déjà présent dans Magento (dans les adresses) lors de ma recherche sur la façon d’afficher le champ société natif de magento et j’ai découvrir une méthode magento qui n’est pas encore implémenté dans le core :) il s’agit de :

      cette fonction normalement doit être lié un champ dans la configuration pour permettre d’affiché l’adresse ou non dans le formulaire de création d’un nouveau client mais c’est pas le cas jusqu’à maintenant il n’existe pas de méthode qui s’appel getShowAddressFields() dans le core!!! donc pour permettre le sauvegarde de l’adresse aussi y comprit la société il faut juste changé dans le fichier : customer/form/register.phtml chercher la ligne :

      et remplacé par exemple par :

      si non si vous voulez ajouter un nouveau champ société lié au client pas a l’adresse je crois pouvoir comprit le problème c’est dans mysql4-install-0.1.0.php le contenu de ce fichier s’exécute une seul fois durant l’installation du module donc même si vous ajouter les lignes pour la création d’attribut “soceite” il ne va s’ajouter donc soit vous désinstallé le module et le réinstaller soit vous exécutez le contenu ajouté quelque par pour que l’attribut s’ajoute.
      bonne chance :)

  2. Bonjour, merci pour ce tutoriel qui correspond exactement à ce que je voulais faire… mais …je n’arrive pas à le faire marcher :(
    J’ai bien uploadé tous les fichiers concernés dans les bons dossiers avec les bons contenus, mais je ne vois nulle part le champ Siret (ni dans le Back Office, ni sur le site dans la page de création de compte).
    Je pense que ça peut venir du fichier mysql4-install-0.1.0.php qui ne serait pas exécuté : pour les autres modules que j’avais installé j’étais passée par Magento Connect avec une clé d’extension etc… mais là, comment se passe “l’installation” puisque j’ai seulement uploadé les fichiers ?
    Merci d’avance de votre aide :/

    1. Bonjour,
      pour le front-office vous avez ajouter le bout de code dans customer/form/register.phtml ?

      pour le front office vérifiez si le module est bien installé : Système->Configuration->Avancé, Mahigento_Newattcustomer est bien la?
      vous l’avez installé sur quel version Magento? sinon pour installé le module manuellement il suffit de copier le dossier app dans la racine du dossier magento, vider le cache et se déconnecté du backoffice.
      Bonne chance.

  3. Merci pour votre réponse rapide, pour le back office c’était effectivement juste un problème de cache, j’ai purgé mon cache, me suis déconnectée puis reconnectée et effectivement le module Mahigento_Newattcustomer était bien activé dans Système->Configuration->Avancé, et je voyais bien le champ Siret dans la gestion des clients…
    … mais impossible de voir le champ Siret sur le site, les changements au fichier register.phtml ne semblaient rien faire… et j’ai enfin trouvé pourquoi :
    J’avais installé une extension qui s’appelle Dull_Addressfields et qui permet de gérer les champs d’inscription (en cacher, les rendre obligatoires ou pas) et cette extension prenait le dessus sur mon fichier register.phtml et car il avait son propre fichier dans un dossier “template/dull”…
    La prochaine fois je me méfierai :)
    Bref tout marche maintenant et merci pour tout ;)

  4. Bonsoir,

    Merci pour cet exemple rapide et fonctionnel.

    Avec un observer il me semble impossible de valider un ou plusieurs champs supplémentaires dans le formulaire. Dans ce cas là, la seule possibilité est-elle de surcharger complètement la méthode du contrôleur ?

    Je souhaite par exemple ajouter plusieurs champs dans le compte utilisateur qui seraient éditables via “mon compte > Informations du compte” et qui n’apparaîtraient pas lors de l’inscription.

    Mais même, si les champs doivent être validés lors de l’inscription, c’est impossible avec l’observer, je me trompe ? Ou tout du moins c’est impossible de valider tous les champs en même temps (ceux d’origine + les notres).

    Merci,
    A+ benjamin.

  5. Le champ Siret n’apparaît pas en back office sur 1.4.2.0.
    ça fonctionne parfaitement en front mais mysql4-install-0.1.0.php ne s’exécute pas à la création du module (suppression puis ré import via FTP). Du coup, le champ siret n’apparait pas sur mysql. Une astuce ?

  6. Bonjour et merci pour ce tuto fort utile,
    je l’ai installé, tout s’affiche, mais l’enregistrement en base fonctionne seulement coté backoffice,
    je dois avoir un souci au niveau de la récupération des informations envoyées par le formulaire…
    Pour info, voila les bouts de codes, j’ai surtout remplacer Siret par Move ou “id-move”
    Une idée? et encore merci pour l’initiative :-)

    >>>>> mysql
    startSetup();
    $installer->addAttribute(‘customer’, ‘id-move’, array(
    ‘label’ => ‘Identifiant MOVE’,
    ‘visible’ => true,
    ‘required’ => false,
    ));
    $installer->endSetup();

    >>>>>Register

    *__(‘Identifiant MOVE’) ?>

    <input type="text" name="id-move" id="id-move" title="__(‘Identifiant MOVE’) ?>” class=”input-text required-entry” />

    >>>>>config
    juste remplacé : saveMove

    >>>>>observer
    getControllerAction();
    //si notre Controller correspond bien au controlller qui traite l’enregistrement
    if ($Controller instanceof Mage_Customer_AccountController) {
    $actionName = $Controller->getFullActionName();
    if ($actionName == ‘customer_account_createpost’) {
    $data = $Controller->getRequest()->getPost();
    $customerId=Mage::getSingleton(‘customer/session’)->getId();
    $customer = Mage::getModel(‘customer/customer’)->load($customerId);
    $customer->setMove($data[‘id-move’]);
    $customer->save();
    }
    }
    }

    }

    1. @Dima excusez moi pour ce retard de ma réponse, je pense qu le probleme vien de l’utilisation du Tiret(-) dans le code attribut qui n’est pas autorisé vous devez
      utiliser uniquement des lettres (a-z), des chiffres (0-9) ou underscore (_) dans ce champ, en commençant par une lettre.

  7. Bonjour,

    Juste une petite question, car j’ai du me tromper étant donné qu’aucun champ n’apparait dans le Backoffice (sur le front aucun problème…). Quand on veut ajouter plusieurs nouveaux champs d’information d’un seul coup, faut-il faire comme ça :

    ———–Observer.php————

    getControllerAction();
    //si notre Controller correspond bien au controlller qui traite l’enregistrement
    if ($Controller instanceof Mage_Customer_AccountController) {
    $actionName = $Controller->getFullActionName();
    // l’action qui traite l’enregistrement d’un nouveu cleint
    if ($actionName == ‘customer_account_createpost’) {
    // récuperer les informations envoyé par le formulaire
    $data = $Controller->getRequest()->getPost();
    $customerId=Mage::getSingleton(‘customer/session’)->getId();
    $customer = Mage::getModel(‘customer/customer’)->load($customerId);
    // affecter le siret au client en cours
    $customer->setSiret($data[‘function’]);
    $customer->setSiret($data[‘society’]);
    $customer->setSiret($data[‘gsm’]);
    $customer->setSiret($data[‘website’]);
    $customer->setSiret($data[‘siret’]);
    $customer->setSiret($data[‘blog’]);
    $customer->save();
    }
    }
    }

    }
    ?>
    —————————————————-

    ————–mysql4-install-0.1.0.php————–
    startSetup();

    $installer->addAttribute(‘customer’, ‘function’, array(
    ‘label’ => ‘Function within the institution’,
    ‘visible’ => true,
    ‘required’ => false,
    ));
    $installer->addAttribute(‘customer’, ‘society’, array(
    ‘label’ => ‘Society / Institution’,
    ‘visible’ => true,
    ‘required’ => false,
    ));
    $installer->addAttribute(‘customer’, ‘gsm’, array(
    ‘label’ => ‘GSM’,
    ‘visible’ => true,
    ‘required’ => false,
    ));
    $installer->addAttribute(‘customer’, ‘website’, array(
    ‘label’ => ‘Website’,
    ‘visible’ => true,
    ‘required’ => false,
    ));
    $installer->addAttribute(‘customer’, ‘siret’, array(
    ‘label’ => ‘Siret’,
    ‘visible’ => true,
    ‘required’ => false,
    ));
    $installer->addAttribute(‘customer’, ‘blog’, array(
    ‘label’ => ‘Blog’,
    ‘visible’ => true,
    ‘required’ => false,
    ));
    $installer->endSetup();
    ————————————————————————–
    Parce que j’ai fait de cette manière et rien du tout, pas de petite nouveauté côté backoffice (à part l’installation du module dans Systeme -> Config -> Avancé

    Si on pouvait m’aider ce serait super!!

    Très bon tuto en tout cas. Merci!

  8. Juste une précision je suis en 1.4.2.0…peut être que ca vient de là car j’ai essayé avec seulement un seul attribut supplémentaire et rien n’y fait.

    Merci d’avance :)

    1. Bonjour Tewal,
      dans le code vous devez changer

      par :

      pour le problème du de la version 1.4.2.0 a vrais dire j’ai pas d’idée pq ne marche pas de ma part je ne la recommande pas
      car j’ai rencontré plusieurs bug dans cette versions, en tout cas une fois j’aurai un peut du temps j’essaye de regarder
      si je trouve une solution :),

  9. Bonjour,
    J’ai testé ce module mais j’obtenais une erreure lors de l’envoi du formulaire de création de compte, je l’ai donc désinstallé comme ceci :
    – suppression des modifs et des fichiers du module

    Par contre, j’ai toujours l’attribut siret présent dans mon back office, comment le supprimer ?

    Merci d’avance

  10. Bonjour,

    Merci pour ce tuto trés utile
    Je viens d’essayer et tout focntionne pour l’enregistrement du siret sur la page register.phtml. En revanche, je n’ai rien dans l’admin, malgré le nettoyage du cache, l’activation du module…
    J’aurais aussi aimé savoir comment faire pour rendre ce champs modifiable par les clients adns leur compte, sur la page edit.phtml par exemple ?

    Merci d’avance

  11. Bonjour
    Je suis en train de tester votre code mais je n’arrive pas à le faire marcher dans le checkout.
    Vous avez déjà suggéré la solution

    else if ($Controller instanceof Mage_Checkout_OnepageController) {…

    mais elle n’est pas complète et je n’arrive pas à l’intégrer. Est-ce que vous pourriez publier l’exemple complet, s’il vous plait ?
    Merci

  12. Bonjour,

    Je viens de tester ce module aussi. Comment puis-je le désinstaller correctement.
    J ai le meme probleme que Pierre , il reste mon champs Siret dans le backoffice

    Merci

  13. Bonjour,
    Je suis sur magento 1.6. le tuto marche bien sur le front office (l’envoi ok pasq la valeur est enregistré sur la table des attributs),MAIS j’arrive plus à récupérer la valeur envoyée par le formulaire et l’afficher sur le back-office (les infos du client).
    Merci pour vos aides.

  14. Bonjour, merci pour ce tuto, j’ai une petite question concernant sur les inscription des clients sur ma boutique magento, comment trier entre les clients pour chaque groupe clients par exemple si je suis un client invite quand je m’inscris sur le site est possible de faire un choix entre un groupe général, Not logged in, ou retailer ou wholesale …….. merci d’avance

Leave a Reply to Tewal Cancel Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">