Ceci est un tutoriel pour prestashop 1.5 et 1.6 pour ajouter un champ dans le formulaire d'inscription de Prestashop pour tout client et pas seulement dans le formulaire d'adresse, cela fonctionne pour l'inscription "one step account mais aussi pour l'inscription compléte".
Les fichiers à modifier pour l'ajout d'un champ
4 fichiers sont à modifier pour ajouter une ligne au formulaire prestashop d'inscription
themes/NOM_DU_THEME/authentication.tpl
controllers/front/AuthController.php
class/Customer.php
controllers/admin/AdminCustomersController.php
Modification de la base de donnée Prestashop pour ajouter une colonne pour le client
ALTER TABLE `ps_customer`
ADD `champ` VARCHAR(250)
A noter :
Adapter le préfixe de table que vous avez choisi dans votre installation prestashop au lieu de "ps_"
La taille, le nom et le format du champ "champ" sont à décider selon votre besoin.
Modification du formulaire d'authentification Prestashop
Tout se joue dans themes/NOM_DU_THEME/authentication.tpl
Vous pouvez ajouter votre code là ou vous le souhaitez dans le fichier en adaptant par rapport à la présentation du code (div, p, span ...)
<div class="text">
<label for="champ">{l s='Champ'}</label>
<input name="champ" type="text" class="" id="champ" />
</div>
Vous pouvez chercher dans le code lastname par exemple et faire un même paragraphe mais avec votre "champ"
Modification du controller Prestashop avec le nouveau champ
Là on est dans le lourd, 3 modifications sont nécessaires dans le fichier controllers/front/AuthController.php :
Première
Dès que vous voyez : "$this->errors[] = Tools::displayError('Invalid date of birth.');"
Vous ajoutez juste en dessous : $customer->champ= $champ;
Seconde
ATTENTION la seconde modification est dure :) c'est la même chose mais comme le code existe en double dans le fichier on reprend :
Dès que vous voyez : "$this->errors[] = Tools::displayError('Invalid date of birth.');"
Vous ajoutez juste en dessous : $customer->champ= $champ;
Troisième
Cherchez ce bout de code
$this->context->customer = $customer;
$this->context->smarty->assign('confirmation', 1);
$this->context->cookie->id_customer = (int)$customer->id;
Et ajoutez juste en dessous :
$this->context->cookie->customer_champ = $customer->champ;
Modification du customer.php pour ajouter le champ
Dans le fichier class/Customer.php
Etape 1
juste après : public $id;
ajoutez :
public $champ;
Etape 2
juste après la définition :
'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32),
Ajoutez :
'champ' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 20),
size est la taille à modifier suivant la déclaration faite dans la table.
nous avons mis le "champ" en obligatoire avec l'option required => true, changer à false si vous ne voulez pas.
Voir sa nouvelle variable dans l'administration des clients Prestashop
Maintenant nous allons ajoutez le "champ" dans le résumé des clients de votre boutique :
A la place de :
'title' => $this->l('Last visit'),
'width' => 100,
'type' => 'datetime',
'search' => false,
'havingFilter' => true
)
);
vous placez le code suivant :
'title' => $this->l('Last visit'),
'width' => 100,
'type' => 'datetime',
'search' => false,
'havingFilter' => true
),
'champ' => array(
'title' => $this->l('champ'),
'width' => 'auto',
'search' => true
)
);
J'espère que ce petit tutoriel vous a aidé, bon code Prestashop ...