Lors de la création d’un compte client sur votre site, vous aurez peut-être besoin de récupérer des fichiers du client pour justifier certaines situations ( justificatif de situation , cv, ect … )
Nous allons voir comment faire pour récupérer des fichiers lors de la création du compte.

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

Avant toute chose il va falloir modifier le template du formulaire de création de compte.
Et trouver la ligne : ( sur la version 1.6.1.4 : ligne 428 ) dans le fichier authentication.tpl de votre thème.

<form action="{$link->getPageLink('authentication', true)|escape:'html':'UTF-8'}" method="post" id="account-creation_form" class="std box">

et rajouter l’attribut : enctype=”multipart/form-data”

Ce qui donne le code suivant :

<form action="{$link->getPageLink('authentication', true)|escape:'html':'UTF-8'}" method="post" id="account-creation_form" class="std box" enctype="multipart/form-data">

Ceci permettra de gérer les envois de fichiers depuis le formulaire.

Pour le code initial je vais créer un module hhregistration, qui va permettre d’ajouter des champs au formulaire de création de compte, puis de procéder à leur traitement.
J’avais déjà écrit un article sur ce sujet : https://www.h-hennes.fr/blog/2015/06/29/prestashop-ajouter-des-champs-a-linscription/

Créer un fichier dans modules/hhregistration/hhregistration.php avec le contenu suivant :

 <?php
 
/**
 * Module Hh Registration : Ajout de champs au formulaire d'inscription
 *
 */
class hhregistration extends Module {
 
 
    /** Extensions autorisées pour l'envoi de fichiers */
    private $_registration_allowed_extensions = array('pdf','doc','docx','jpg','png','gif','txt');
 
    /* Nom du dossier dans lequel sont envoyés les fichiers */
    private $_upload_dir = 'files/';
 
    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) {
 
        //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)
    {
        //Gestion de l'upload via la classe d'upload prestashop
        $uploader = new Uploader('file_input'); //Renseigner ici le nom du champ input
        $uploader->setAcceptTypes($this->_registration_allowed_extensions)
                ->setCheckFileSize(UploaderCore::DEFAULT_MAX_SIZE)
                ->setSavePath(dirname(__FILE__) . '/' . $this->_upload_dir)
                ->process();
    }
 
}

 

La logique d’upload du fichier est assez simple car elle reprend tout simplement la classe d’envoi de fichier de Prestashop 🙂

 $uploader = new Uploader('file_input'); //Renseigner ici le nom du champ input
        $uploader->setAcceptTypes($this->_registration_allowed_extensions) // Définition des extensions autorisées
                ->setCheckFileSize(UploaderCore::DEFAULT_MAX_SIZE) //Taille maximum des fichiers à envoyer
                ->setSavePath(dirname(__FILE__) . '/' . $this->_upload_dir) // Répertoire de destination
                ->process(); // Traitement de l'envoi

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="file-input">{l s='Justificatif Professionnel' mod='hhregistration'}</label>
    <input type="file" name="file_input" />
</div>
<!-- Module hhregistration -->

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

upload-file

 

Si vos utilisateurs insèrent des pièces jointes lors de leur inscription, celles-ci seront déposées dans le dossier “files” du module hhregistration 🙂
Le module est téléchargeable sur github : https://github.com/nenes25/prestashop_hhregistration