C’est une question qui revient souvent sur Prestashop, comment ajouter des champs lors de l’inscription d’un client ?
Nous allons voir ensemble comment réaliser cela simplement.

Pour l’exemple, nous allons permettre à l’utilisateur de choisir son groupe client lors de l’inscription.
Si vous souhaiter rajouter des champs dans le formulaire d’édition client, vous pouvez consulter l’article : Prestashop : Ajouter des champs dans l’édition client
Si vous souhaitez pouvoir envoyer des fichiers lors de la création du compte client vous pouvez consulter l’article : Prestashop : Envoyer des fichiers lors de la création du compte client

Edit : Le fonctionnement change avec prestashop 1.7 , consulter l’article pour le tutoriel actualisé : Prestashop 1.7 : Ajouter des champs clients

Pour faire cela nous allons créer un nouveau module qui va se greffer sur les hooks prestashop disponibles pour cet usage :

  • displayCustomerAccountForm : ce hook permets de rajouter du contenu dans le formulaire de création de compte.
  • actionCustomerAccountAdd : ce hook permets de récupérer les informations transmises lors de la création du compte client.

C’est donc parti pour le code du module qui va s’appeller hhregistration
Créer un fichier dans modules/hhregistration/hhregistration.php avec le contenu suivant :
( les différentes fonctions sont commentées )

<?php
 
/**
 * Module Hh Registration : Ajout de champs au formulaire d'inscription
 *
 */
class hhregistration extends Module
{
 
    public function __construct()
    {
        $this->name = 'hhregistration';
        $this->tab = 'hhennes';
        $this->author = 'hhennes';
        $this->version = '0.1.0';
        $this->need_instance = 0;
 
        parent::__construct();
 
        $this->displayName = $this->l('HH Registration');
        $this->description = $this->l('Sample module which show how to add fields to registration');
    }
 
    /**
     * Installation du module : Installation Standard + greffe sur les hooks nécessaires
     * @return boolean
     */
    public function install()
    {
        if (
                !parent::install() || !$this->registerHook('displayCustomerAccountForm') || !$this->registerHook('actionCustomerAccountAdd')
        )
            return false;
 
        return true;
    }
 
    /**
     * Désintallation du module
     * @return boolean
     */
    public function uninstall()
    {
        if (!parent::uninstall())
            return false;
        return true;
    }
 
    /**
     * Nouveaux champs à rajouter sur le formulaire de création de compte
     * @param type $params
     */
    public function hookDisplayCustomerAccountForm($params)
    {
 
        //Récupération des groupes clients Prestashop
        $groups = Group::getGroups($this->context->language->id);
        
        //On supprime les groupes systèmes de prestashop ( Les 3 premiers ids )
        unset($groups[0]);
        unset($groups[1]);
        unset($groups[2]);
        
        //Assignation des variables au template
        $this->context->smarty->assign('customerGroups', $groups);
 
        //Affichage du template du module ( situé dans views/templates/hook )
        return $this->display(__FILE__, 'hookDisplayCustomerAccountForm.tpl');
    }
 
    /**
     * Traitement des nouveaux champs du formulaire d'inscription
     */
    public function hookActionCustomerAccountAdd($params)
    {
        
        //On récupère notre variable groupe
        $id_customer_group = Tools::getValue('customer_group','');
        
        //Si elle n'est pas vide on ajoute le client au groupe
        if ( $id_customer_group != '')
            $params['newCustomer']->addGroups(array($id_customer_group));
 
    }
 
}

Créez ensuite un fichier dans modules/hhregistration/views/templates/hook/hookDisplayCustomerAccountForm.tpl  avec le contenu suivant

{* Template d'affichage du module hhregistration *}
<!-- Module hhregistration -->
<div class="form-group">
    <label for="customer-group">{l s='Customer group' mod='hhregistration'}</label>
    <select name="customer_group" id="customer_group" class="form-control">
        <option value="">{l s='Choose your customer group' mod='hhregistration'}</option>
        {foreach from=$customerGroups item=group}
            <option value="{$group.id_group}">{$group.name}</option>
        {/foreach}
    </select>
</div>
<!-- Module hhregistration --> 

Installer le module, créez de nouveaux groupes clients et le rendu sera similaire à cette capture :

prestashop-champ-inscription