Ajouter des champs personnalisés dans le formulaire d’inscription

Pour les besoins d’un projet, à la demande du client je devais ajouter des champs additionnels dans le formulaire d’inscription. Je vous propose donc de découvrir ensemble comment ajouter ces champs qui seront visibles en front et dans la partie admin.

Comme pour beaucoup de modifications sur Magento, nous allons devoir créer un module qui sera composé des fichiers suivants :

app
--code
----local
------Lkinteractive
--------Customfield
----------etc
------------config.xml
----------Helper
------------Data.php
----------sql
------------lkinteractive_customfield_setup
--------------install-1.0.0.php
etc
--modules
----Lkinteractive_Customfield.xml

Tout d’abord, quelques explications sur la hiérarchie du module. On crée d’abord le nom du groupe qui va accueillir le ou les modules (en général la société pour laquelle vous travaillez), ici Lkinteractive. Ensuite on crée le nom du module, ici Customfield

C’est comme ça que fonctionne tous les modules Magento. La première chose à faire ensuite, c’est de donner une configuration à notre module, qu’est-ce qu’il doit faire, à quel moment, événement, et quel fonction on souhaite réaliser. Et c’est dans notre fichier config.xml que ça se passe. On va donc le créer dans le dossier etc de notre module et y insérer toutes les informations pour la création de nos champs personnalisés.

La première chose à faire, c’est d’indiquer la version et le nom du module :

<?xml version="1.0"?>
<config>
<modules>
<Lkinteractive_Customfield>
<version>1.0.1</version>
</Lkinteractive_Customfield>
</modules>
</config>

Vous remarquerez que le nom du module est toujours composé du namespace du groupe suivi d’un underscore et du nom du module. On va ensuite lui indiquer le helper. Le helper, est un objet qui contient vos fonctions, et que vous pourrez appeler n’importe où par la suite c’est obligatoire, même si vous ne mettrez rien à l’intérieur, le module en a besoin pour fonctionner. Pour plus d’explication, je vous renvois vers le site de Pierre Fay qui explique bien mieux que moi la fonction d’un helper : Les helpers – Pierre Fay

On indique également le fichier qui va permettre d’ajouter les champs : install-1.0.0.php

<global>
<helpers>
<lkinteractive_customfield>
<class>Lkinteractive_Customfield_Helper</class>
</lkinteractive_customfield>
</helpers>
<resources>
<lkinteractive_customfield_setup>
<setup>
<module>Lkinteractive_Customfield</module>
<class>Mage_Customer_Model_Resource_Setup</class>
</setup>
</lkinteractive_customfield_setup>
</resources>
</global>

Enfin on ajoute les informations sur la version du module à récupérer :

<frontend>
<layout>
<updates>
<lkinteractive_customfield>
<file>lkinteractive_customfield.xml</file>
</lkinteractive_customfield>
</updates>
</layout>
<translate>
<modules>
<Lkinteractive_Customfield>
<files>
<default>Lkinteractive_Customfield.csv</default>
</files>
</Lkinteractive_Customfield>
</modules>
</translate>
</frontend>

Ce qui donne donc :

<?xml version="1.0"?>
<config>
<modules>
<Lkinteractive_Customfield>
<version>1.0.1</version>
</Lkinteractive_Customfield>
</modules>
<global>
<helpers>
<lkinteractive_customfield>
<class>Lkinteractive_Customfield_Helper</class>
</lkinteractive_customfield>
</helpers>
<resources>
<lkinteractive_customfield_setup>
<setup>
<module>Lkinteractive_Customfield</module>
<class>Mage_Customer_Model_Resource_Setup</class>
</setup>
</lkinteractive_customfield_setup>
</resources>
</global>
<frontend>
<layout>
<updates>
<lkinteractive_customfield>
<file>lkinteractive_customfield.xml</file>
</lkinteractive_customfield>
</updates>
</layout>
<translate>
<modules>
<Lkinteractive_Customfield>
<files>
<default>Lkinteractive_Customfield.csv</default>
</files>
</Lkinteractive_Customfield>
</modules>
</translate>
</frontend>
</config>

Notre fichier data.php ne contiendra que notre classe helper :

class Lkinteractive_Customfield_Helper_Data extends Mage_Core_Helper_Abstract
{
}

Reste notre fichier install-1.0.0.php qui va nous permettre d’ajouter les champs que l’on souhaite ici siret :

<?php
$this->addAttribute('customer', 'siret', array(
'type'      => 'int',
'label'     => 'Siret',
'input'     => 'text',
'position'  => 120,
'required'  => false,//or true
'is_system' => 0,
));
$attribute = Mage::getSingleton('eav/config')->getAttribute('customer', 'siret');
$attribute->setData('used_in_forms', array(
'adminhtml_customer',
'checkout_register',
'customer_account_create',
'customer_account_edit',
));
$attribute->setData('is_user_defined', 0);
$attribute->save();
?>

Il ne nous reste plus qu’à activer notre module en ajoutant le fichier Lkinteractive_Customfield.xml dans etc->modules. Pour activer un module, le nom du fichier xml, doit-être composé du namespace, suivi d’un inderscore et du nom du module :

<?xml version="1.0"?>
<config>
<modules>
<Lkinteractive_Customfield>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Customer/>
</depends>
</Lkinteractive_Customfield>
</modules>
</config>

A ce stade, vous devriez voir le champs dans l’admin. Il nous reste à l’afficher dans le front. Pour cela, on ira éditer le fichier “register.phtml” qui se trouve dans le dossier persistent->customer->form du thème que vous utilisez :

<label for="siret" class="required"><em>*</em><?php echo $this->__('Siret') ?></label>
<div class="input-box">
<input type="text" name="siret" id="siret" value="<?php echo $this->escapeHtml($this->getFormData()->getSiret()) ?>" title="<?php echo $this->__('siret') ?>" class="input-text" required="required" />
</div>

Félicitation, vous avez maintenant un nouveau champs dans votre boutique !