{"id":1174,"date":"2015-10-25T12:05:20","date_gmt":"2015-10-25T10:05:20","guid":{"rendered":"http:\/\/www.h-hennes.fr\/blog\/?p=1174"},"modified":"2021-06-18T12:48:28","modified_gmt":"2021-06-18T10:48:28","slug":"prestashop-ajouter-des-champs-edition-dun-client","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2015\/10\/25\/prestashop-ajouter-des-champs-edition-dun-client\/","title":{"rendered":"Prestashop : Ajouter des champs dans l&rsquo;\u00e9dition client"},"content":{"rendered":"<p>En compl\u00e9ment de mon pr\u00e9c\u00e9dent article, <a href=\"https:\/\/www.h-hennes.fr\/blog\/2015\/06\/29\/prestashop-ajouter-des-champs-a-linscription\/\" target=\"_blank\" rel=\"noopener\">Prestashop : Ajouter des champs \u00e0 l\u2019inscription<\/a> , voici comment rajouter des champs sur le formulaire d&rsquo;\u00e9dition d&rsquo;un client. ( IdentityController )<\/p>\n<p>L&rsquo;exemple reste le m\u00eame, \u00e0 savoir que le client peut choisir son groupe client.<br \/>\nJ&rsquo;ai retir\u00e9 le code qui \u00e9tait relatif \u00e0 l&rsquo;ajout des champs sur le formulaire d&rsquo;inscription pour plus de claret\u00e9, mais les 2 peuvent bien \u00e9videmment cohabiter.<\/p>\n<p>La proc\u00e9dure est un peu plus complexe car elle n\u00e9cessite la cr\u00e9ation d&rsquo;un nouveau hook pour pouvoir sauvegarder les donn\u00e9es souhait\u00e9es.<br \/>\nLe module va \u00eatre greff\u00e9 sur le hook prestashop <strong>displayCustomerIdentityForm <\/strong>( attention il n&rsquo;existe qu&rsquo;\u00e0 partir de la version 1.6.0.11 ), et nous allons cr\u00e9er un nouveau hook <strong>actionCustomerIdentityFormSubmit<\/strong><\/p>\n<p>Voici le code du module<\/p>\n<pre lang=\"php\" escaped=\"true\">&lt;?php\r\nclass hhregistration extends Module {\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 identity controller');\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('displayCustomerIdentityForm') || !$this-&gt;registerHook('actionCustomerIdentityFormSubmit')\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 * Affichage des champs \u00e0 rajouter sur le formulaire d'\u00e9dition client\r\n\u00a0\u00a0\u00a0\u00a0 *\/\r\n\u00a0\u00a0\u00a0 public function hookDisplayCustomerIdentityForm($params) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $customerCustomGroup = 4; \/\/ Assignation de la valeur (statique proof of concept)\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $this-&gt;context-&gt;smarty-&gt;assign('customerGroup', $customerCustomGroup);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/R\u00e9cup\u00e9ration des groupes clients Prestashop\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $groups = Group::getGroups($this-&gt;context-&gt;language-&gt;id);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/On supprime les groupes syst\u00e8mes de prestashop ( Les 3 premiers ids )\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 unset($groups[0]);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 unset($groups[1]);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 unset($groups[2]);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Assignation des variables au template\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $this-&gt;context-&gt;smarty-&gt;assign('customerGroups', $groups);\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 \/**\r\n\u00a0\u00a0\u00a0\u00a0 * Nouveau Hook pour traiter les donn\u00e9es lors de l'\u00e9dition du formulaire\r\n\u00a0\u00a0\u00a0\u00a0 *\/\r\n\u00a0\u00a0\u00a0 public function hookActionCustomerIdentityFormSubmit($params) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/On r\u00e9cup\u00e8re notre variable groupe\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $id_customer_group = $params['post']['customer_group'];\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Si elle n'est pas vide on ajoute le client au groupe\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if ($id_customer_group != '')\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $params['customer']-&gt;addGroups(array($id_customer_group));\r\n\u00a0\u00a0\u00a0 }\r\n\r\n}\r\n<\/pre>\n<p>Cr\u00e9ez ensuite un fichier dans modules\/hhregistration\/views\/templates\/hook\/hookDisplayCustomerAccountForm.tpl avec le contenu suivant<\/p>\n<pre lang=\"smarty\" escaped=\"true\">&lt;!-- Module hhregistration --&gt;\r\nGroupe client {$customerGroup}\r\n&lt;div class=\"form-group\"&gt;\r\n\u00a0\u00a0\u00a0 &lt;label for=\"customer-group\"&gt;{l s='Customer group' mod='hhregistration'}&lt;\/label&gt;\r\n\u00a0\u00a0\u00a0 &lt;select name=\"customer_group\" id=\"customer_group\" class=\"form-control\"&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;option value=\"\"&gt;{l s='Choose your customer group' mod='hhregistration'}&lt;\/option&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {foreach from=$customerGroups item=group}\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;option value=\"{$group.id_group}\" {if $customerGroup == $group.id_group} selected=\"selected\"{\/if}&gt;{$group.name}&lt;\/option&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\/foreach}\r\n\u00a0\u00a0\u00a0 &lt;\/select&gt;\r\n&lt;\/div&gt;\r\n&lt;!-- Module hhregistration --&gt;<\/pre>\n<p>Pour finir nous allons devoir surcharger le controller front office <strong>IdentityController<\/strong> afin de rajouter notre nouveau hook.<br \/>\nPour cela cr\u00e9er le fichier hhregistration\/override\/controllers\/front\/IdentityController avec le contenu suivant :<\/p>\n<pre lang=\"php\" escaped=\"true\">&lt;?php\r\n\r\nclass IdentityController extends IdentityControllerCore {\r\n\r\n\u00a0\u00a0\u00a0 public function postProcess() {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Traitement parent\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $return = parent::postProcess();\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Si il n'y a pas d'erreur on ex\u00e9cute notre nouveau hook\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (Tools::isSubmit('submitIdentity') &amp;&amp; sizeof($this-&gt;errors) &lt; 1) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Hook::exec('actionCustomerIdentityFormSubmit',array('post' =&gt; $_POST, 'customer' =&gt; $this-&gt;customer));\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return $return; \r\n\u00a0\u00a0\u00a0 }\r\n\r\n} \r\n<\/pre>\n<p>Le module peut maintenant \u00eatre install\u00e9.<br \/>\nEt il l&rsquo;utilisateur \u00e0 la possibilit\u00e9 d&rsquo;\u00e9diter les champs personnalis\u00e9s.<\/p>\n<p><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2015\/10\/champs-edition.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1179\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2015\/10\/champs-edition.png\" alt=\"Champ \u00e9dition client\" width=\"392\" height=\"582\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2015\/10\/champs-edition.png 392w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2015\/10\/champs-edition-202x300.png 202w\" sizes=\"auto, (max-width: 392px) 100vw, 392px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En compl\u00e9ment de mon pr\u00e9c\u00e9dent article, Prestashop : Ajouter des champs \u00e0 l\u2019inscription , voici comment rajouter des champs sur le formulaire d&rsquo;\u00e9dition d&rsquo;un client. ( IdentityController ) L&rsquo;exemple reste le m\u00eame, \u00e0 savoir que le client peut choisir son groupe client. J&rsquo;ai retir\u00e9 le code qui \u00e9tait relatif \u00e0 l&rsquo;ajout des champs sur le [&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":[397,396,104],"class_list":["post-1174","post","type-post","status-publish","format-standard","hentry","category-prestashop-2","tag-champs","tag-identity","tag-prestashop","prestashop-1-5","prestashop-1-6","prestashop-1-7-6","prestashop-1-7-8","prestashop-8-0"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1174","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=1174"}],"version-history":[{"count":6,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1174\/revisions"}],"predecessor-version":[{"id":2327,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1174\/revisions\/2327"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=1174"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=1174"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=1174"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}