{"id":1282,"date":"2016-02-18T13:52:43","date_gmt":"2016-02-18T11:52:43","guid":{"rendered":"http:\/\/www.h-hennes.fr\/blog\/?p=1282"},"modified":"2018-11-22T18:14:37","modified_gmt":"2018-11-22T16:14:37","slug":"prestashop-envoyer-des-fichiers-lors-de-la-creation-du-compte-client","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2016\/02\/18\/prestashop-envoyer-des-fichiers-lors-de-la-creation-du-compte-client\/","title":{"rendered":"Prestashop : Envoyer des fichiers lors de la cr\u00e9ation du compte client"},"content":{"rendered":"<p>Lors de la cr\u00e9ation d&rsquo;un compte client sur votre site, vous aurez peut-\u00eatre besoin de r\u00e9cup\u00e9rer des fichiers du client pour justifier certaines situations ( justificatif de situation , cv, ect &#8230; )<br \/>\nNous allons voir comment faire pour r\u00e9cup\u00e9rer des fichiers lors de la cr\u00e9ation du compte.<\/p>\n<p><strong>Edit :<\/strong> Le fonctionnement change avec prestashop 1.7 , consulter l&rsquo;article pour le tutoriel actualis\u00e9 : <a href=\"https:\/\/www.h-hennes.fr\/blog\/2017\/10\/10\/prestashop-1-7-ajouter-des-champs-clients\/\">Prestashop 1.7 : Ajouter des champs clients<\/a><\/p>\n<p>Avant toute chose il va falloir modifier le template du formulaire de cr\u00e9ation de compte.<br \/>\nEt trouver la ligne : ( sur la version 1.6.1.4 : ligne 428 ) dans le fichier authentication.tpl de votre th\u00e8me.<\/p>\n<pre lang=\"html\" escaped=\"true\">&lt;form action=\"{$link-&gt;getPageLink('authentication', true)|escape:'html':'UTF-8'}\" method=\"post\" id=\"account-creation_form\" class=\"std box\"&gt;\r\n<\/pre>\n<p>et rajouter l&rsquo;attribut : enctype=\u00a0\u00bbmultipart\/form-data\u00a0\u00bb<\/p>\n<p>Ce qui donne le code suivant :<\/p>\n<pre lang=\"html\" escaped=\"true\">&lt;form action=\"{$link-&gt;getPageLink('authentication', true)|escape:'html':'UTF-8'}\" method=\"post\" id=\"account-creation_form\" class=\"std box\" enctype=\"multipart\/form-data\"&gt;\r\n<\/pre>\n<p>Ceci permettra de g\u00e9rer les envois de fichiers depuis le formulaire.<\/p>\n<p>Pour le code initial je vais cr\u00e9er un module hhregistration, qui va permettre d&rsquo;ajouter des champs au formulaire de cr\u00e9ation de compte, puis de proc\u00e9der \u00e0 leur traitement.<br \/>\nJ&rsquo;avais d\u00e9j\u00e0 \u00e9crit un article sur ce sujet : <a href=\"https:\/\/www.h-hennes.fr\/blog\/2015\/06\/29\/prestashop-ajouter-des-champs-a-linscription\/\">https:\/\/www.h-hennes.fr\/blog\/2015\/06\/29\/prestashop-ajouter-des-champs-a-linscription\/<\/a><\/p>\n<p>Cr\u00e9er un fichier dans <em>modules\/hhregistration\/hhregistration.php<\/em> avec le contenu suivant :<\/p>\n<pre lang=\"php\" escaped=\"true\"> &lt;?php\r\n\r\n\/**\r\n\u00a0* Module Hh Registration : Ajout de champs au formulaire d'inscription\r\n\u00a0*\r\n\u00a0*\/\r\nclass hhregistration extends Module {\r\n\r\n\r\n\u00a0\u00a0\u00a0 \/** Extensions autoris\u00e9es pour l'envoi de fichiers *\/\r\n\u00a0\u00a0\u00a0 private $_registration_allowed_extensions = array('pdf','doc','docx','jpg','png','gif','txt');\r\n\r\n\u00a0\u00a0\u00a0 \/* Nom du dossier dans lequel sont envoy\u00e9s les fichiers *\/\r\n\u00a0\u00a0\u00a0 private $_upload_dir = 'files\/';\r\n\r\n\u00a0\u00a0\u00a0 public function __construct() {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $this-&gt;name = 'hhregistration';\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $this-&gt;tab = 'hhennes';\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $this-&gt;author = 'hhennes';\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $this-&gt;version = '0.1.0';\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $this-&gt;need_instance = 0;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 parent::__construct();\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $this-&gt;displayName = $this-&gt;l('HH Registration');\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $this-&gt;description = $this-&gt;l('Sample module which show how to add fields to registration');\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 \/**\r\n\u00a0\u00a0\u00a0\u00a0 * Installation du module : Installation Standard + greffe sur les hooks n\u00e9cessaires\r\n\u00a0\u00a0\u00a0\u00a0 * @return boolean\r\n\u00a0\u00a0\u00a0\u00a0 *\/\r\n\u00a0\u00a0\u00a0 public function install() {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 !parent::install() || !$this-&gt;registerHook('displayCustomerAccountForm') || !$this-&gt;registerHook('actionCustomerAccountAdd')\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 )\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return false;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return true;\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 \/**\r\n\u00a0\u00a0\u00a0\u00a0 * D\u00e9sintallation du module\r\n\u00a0\u00a0\u00a0\u00a0 * @return boolean\r\n\u00a0\u00a0\u00a0\u00a0 *\/\r\n\u00a0\u00a0\u00a0 public function uninstall() {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (!parent::uninstall())\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return false;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return true;\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 \/**\r\n\u00a0\u00a0\u00a0\u00a0 * Nouveaux champs \u00e0 rajouter sur le formulaire de cr\u00e9ation de compte\r\n\u00a0\u00a0\u00a0\u00a0 * @param type $params\r\n\u00a0\u00a0\u00a0\u00a0 *\/\r\n\u00a0\u00a0\u00a0 public function hookDisplayCustomerAccountForm($params) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Affichage du template du module ( situ\u00e9 dans views\/templates\/hook )\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return $this-&gt;display(__FILE__, 'hookDisplayCustomerAccountForm.tpl');\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 \/**\r\n\u00a0\u00a0\u00a0\u00a0 * Traitement des nouveaux champs du formulaire d'inscription\r\n\u00a0\u00a0\u00a0\u00a0 *\/\r\n\u00a0\u00a0\u00a0 public function hookActionCustomerAccountAdd($params)\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Gestion de l'upload via la classe d'upload prestashop\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $uploader = new Uploader('file_input'); \/\/Renseigner ici le nom du champ input\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $uploader-&gt;setAcceptTypes($this-&gt;_registration_allowed_extensions)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -&gt;setCheckFileSize(UploaderCore::DEFAULT_MAX_SIZE)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -&gt;setSavePath(dirname(__FILE__) . '\/' . $this-&gt;_upload_dir)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -&gt;process();\r\n\u00a0\u00a0\u00a0 }\r\n\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>La logique d&rsquo;upload du fichier est assez simple car elle reprend tout simplement la classe d&rsquo;envoi de fichier de Prestashop \ud83d\ude42<\/p>\n<pre lang=\"php\" escaped=\"true\"> $uploader = new Uploader('file_input'); \/\/Renseigner ici le nom du champ input\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $uploader-&gt;setAcceptTypes($this-&gt;_registration_allowed_extensions) \/\/ D\u00e9finition des extensions autoris\u00e9es\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -&gt;setCheckFileSize(UploaderCore::DEFAULT_MAX_SIZE) \/\/Taille maximum des fichiers \u00e0 envoyer\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -&gt;setSavePath(dirname(__FILE__) . '\/' . $this-&gt;_upload_dir) \/\/ R\u00e9pertoire de destination\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -&gt;process(); \/\/ Traitement de l'envoi\r\n<\/pre>\n<p>Cr\u00e9ez ensuite un fichier dans modules<em>\/hhregistration\/views\/templates\/hook\/hookDisplayCustomerAccountForm.tpl\u00a0 <\/em>avec le contenu suivant<\/p>\n<pre lang=\"html\" escaped=\"true\">{* Template d'affichage du module hhregistration *}\r\n&lt;!-- Module hhregistration --&gt;\r\n&lt;div class=\"form-group\"&gt;\r\n\u00a0\u00a0\u00a0 &lt;label for=\"file-input\"&gt;{l s='Justificatif Professionnel' mod='hhregistration'}&lt;\/label&gt;\r\n\u00a0\u00a0\u00a0 &lt;input type=\"file\" name=\"file_input\" \/&gt;\r\n&lt;\/div&gt;<\/pre>\n<pre lang=\"html\" escaped=\"true\">&lt;!-- Module hhregistration --&gt;<\/pre>\n<p>Installer le module, cr\u00e9ez de nouveaux groupes clients et le rendu sera similaire \u00e0 cette capture :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1283\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2016\/02\/upload-file.png\" alt=\"upload-file\" width=\"321\" height=\"652\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2016\/02\/upload-file.png 321w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2016\/02\/upload-file-148x300.png 148w\" sizes=\"auto, (max-width: 321px) 100vw, 321px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Si vos utilisateurs ins\u00e8rent des pi\u00e8ces jointes lors de leur inscription, celles-ci seront d\u00e9pos\u00e9es dans le dossier \u00ab\u00a0files\u00a0\u00bb du module hhregistration \ud83d\ude42<br \/>\nLe module est t\u00e9l\u00e9chargeable sur github : <a href=\"https:\/\/github.com\/nenes25\/prestashop_hhregistration\">https:\/\/github.com\/nenes25\/prestashop_hhregistration<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lors de la cr\u00e9ation d&rsquo;un compte client sur votre site, vous aurez peut-\u00eatre besoin de r\u00e9cup\u00e9rer des fichiers du client pour justifier certaines situations ( justificatif de situation , cv, ect &#8230; ) Nous allons voir comment faire pour r\u00e9cup\u00e9rer des fichiers lors de la cr\u00e9ation du compte. Edit : Le fonctionnement change avec prestashop [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[245],"tags":[422,104],"class_list":["post-1282","post","type-post","status-publish","format-standard","hentry","category-prestashop-2","tag-formulaire-inscription","tag-prestashop","prestashop-1-5","prestashop-1-6","prestashop-1-7-4","prestashop-1-7-5","prestashop-1-7-6","prestashop-1-7-7","prestashop-1-7-8","prestashop-8-0","prestashop-8-1"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1282","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/comments?post=1282"}],"version-history":[{"count":9,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1282\/revisions"}],"predecessor-version":[{"id":1629,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1282\/revisions\/1629"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=1282"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=1282"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=1282"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}