{"id":1192,"date":"2015-11-19T15:17:02","date_gmt":"2015-11-19T13:17:02","guid":{"rendered":"http:\/\/www.h-hennes.fr\/blog\/?p=1192"},"modified":"2017-08-11T21:26:33","modified_gmt":"2017-08-11T19:26:33","slug":"magento-ajouter-des-nouveaux-attributs-aux-formulaires-de-creation-de-compte","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2015\/11\/19\/magento-ajouter-des-nouveaux-attributs-aux-formulaires-de-creation-de-compte\/","title":{"rendered":"Magento : Ajouter des nouveaux attributs aux formulaires de cr\u00e9ation de compte"},"content":{"rendered":"<p>Une mise \u00e0 jour de cet article pour Magento 2 est disponible : <a href=\"https:\/\/www.h-hennes.fr\/blog\/2017\/08\/11\/magento-2-ajouter-des-nouveaux-attributs-aux-formulaires-de-creation-de-compte\/\">Magento 2 : Ajouter des nouveaux attributs aux formulaires de cr\u00e9ation de compte<\/a><br \/>\nDans cet article nous allons voir ensemble comment ajouter proprement un nouvel attribut client qui sera affich\u00e9 dans les formulaires suivants<\/p>\n<ul>\n<li>Cr\u00e9ation de compte ( normal )<\/li>\n<li>Cr\u00e9ation de compte ( checkout )<\/li>\n<li>Cr\u00e9ation de compte ( admin )<\/li>\n<\/ul>\n<p>Pour l&rsquo;exemple nous allons cr\u00e9er un attribut \u00ab\u00a0website_know\u00a0\u00bb, qui permettra de demander au client via quel source il a connu le site.<\/p>\n<p>Le tout va \u00eatre g\u00e9r\u00e9 via un module nomm\u00e9 \u00ab\u00a0Hhennes_Customer\u00a0\u00bb.<br \/>\nJe ne d\u00e9taillerais pas toutes les \u00e9tapes de cr\u00e9ation du module mais uniquement les points particuliers.<\/p>\n<p><strong>Partie Code :<\/strong><\/p>\n<p>Pour commencer voici le fichier de configuration de notre module.<\/p>\n<pre lang=\"xml\" escaped=\"true\"> &lt;?xml version=\"1.0\"?&gt;\r\n\r\n&lt;config&gt;\r\n\u00a0\r\n\u00a0\u00a0\u00a0 &lt;!-- Configuration de base du Module --&gt;\r\n\u00a0\u00a0\u00a0 &lt;modules&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;Hhennes_Customer&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;version&gt;0.1.0&lt;\/version&gt;\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/Hhennes_Customer&gt;\r\n\u00a0\u00a0\u00a0 &lt;\/modules&gt;\r\n\u00a0\r\n\u00a0\u00a0\u00a0 &lt;!-- Configuration globale --&gt;\r\n\u00a0\u00a0\u00a0 &lt;global&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;helpers&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;hhennes_customer&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;class&gt;Hhennes_Customer_Helper&lt;\/class&gt;\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/hhennes_customer&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/helpers&gt;\r\n       &lt;!-- Configuration de l'installation --&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;resources&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;hhennescustomer_setup&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;setup&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;module&gt;Hhennes_Customer&lt;\/module&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;class&gt;Mage_Customer_Model_Entity_Setup&lt;\/class&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/setup&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;connection&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;use&gt;core_setup&lt;\/use&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/connection&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/hhennescustomer_setup&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/resources&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;!-- Nouveau champ de cr\u00e9ation de compte dans le checkout --&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;fieldsets&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;customer_account&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;website_know&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;create&gt;1&lt;\/create&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;update&gt;1&lt;\/update&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;to_quote&gt;*&lt;\/to_quote&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/website_know&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/customer_account&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;checkout_onepage_quote&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;website_know&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;to_customer&gt;*&lt;\/to_customer&gt;&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/website_know&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/checkout_onepage_quote&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/fieldsets&gt;\r\n\u00a0\u00a0\u00a0 &lt;\/global&gt;\r\n\u00a0\u00a0\u00a0 &lt;frontend&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;layout&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;updates&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;hhennes_customer&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;file&gt;hhennes_customer.xml&lt;\/file&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/hhennes_customer&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/updates&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/layout&gt;\r\n\u00a0\u00a0\u00a0 &lt;\/frontend&gt;\r\n&lt;\/config&gt;\r\n<\/pre>\n<p>Nous reviendrons plus tard sur la signification de l&rsquo;ensemble des noeuds.<\/p>\n<p>Passons \u00e0 pr\u00e9sent \u00e0 l&rsquo;installation avec le fichier mysql4-install-0.1.php dans le dossier sql\/hhennescustomer_setup de notre module<\/p>\n<pre lang=\"php\" escaped=\"true\"> &lt;?php\r\n\/**\r\n\u00a0* Installation du module Hhennes Customer\r\n\u00a0* \r\n\u00a0* Cr\u00e9ation d'un nouvel attribut qui demande \u00e0 l'utilisateur comment il a connu le site\r\n\u00a0* Ce param\u00e8tre doit \u00eatre disponible dans tous les formulaires de cr\u00e9ation de compte\r\n\u00a0*\/\r\n\r\n\r\n$installer = $this;\r\n$installer-&gt;startSetup();\r\n\r\n$entityTypeId = $installer-&gt;getEntityTypeId('customer');\r\n\r\n\/\/Cr\u00e9ation d'un nouvel attribut qui demande \u00e0 l'utilisateur comment il a connu le site\r\n$this-&gt;addAttribute('customer', 'website_know', array(\r\n\u00a0\u00a0\u00a0 'input' =&gt; 'select',\r\n\u00a0\u00a0\u00a0 'type' =&gt; 'int',\r\n\u00a0\u00a0\u00a0 'label' =&gt; 'Website Know',\r\n\u00a0\u00a0\u00a0 'source' =&gt; 'eav\/entity_attribute_source_table',\r\n\u00a0\u00a0\u00a0 'visible' =&gt; 1,\r\n\u00a0\u00a0\u00a0 'required' =&gt; false,\r\n\u00a0\u00a0\u00a0 'user_defined' =&gt; 1,\r\n\u00a0\u00a0\u00a0 'system' =&gt; false,\r\n\u00a0\u00a0\u00a0 \/\/'option' =&gt; array('values' =&gt; array('By a friend', 'By the work', 'By google', 'Other')) \r\n\u00a0\u00a0 \u00a0\/\/Si on veut ajouter sur un seul store , on peut utiliser la syntaxe comment\u00e9e\r\n));\r\n\r\n\/**\r\n\u00a0* Ajout des Options\r\n\u00a0*\/\r\n$websiteOptions = array(\r\n\u00a0\u00a0\u00a0 'attribute_id' =&gt; $this-&gt;getAttributeId('customer', 'website_know'), \/\/Identifiant de l'attribut\r\n\u00a0\u00a0\u00a0 'value' =&gt; array(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'friend' =&gt; array( \/\/ Ce tableau n'a pas de cl\u00e9 num\u00e9rique l'option va donc \u00eatre cr\u00e9\u00e9e\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0 =&gt; 'By a friend', \/\/Valeur Admin\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1 =&gt; 'Par un ami' \/\/ Valeur Store 1\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'work' =&gt; array(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0 =&gt; 'By the work',\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1 =&gt; 'Par le travail'\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'google' =&gt; array(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0 =&gt; 'By google',\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1 =&gt; 'Par google'\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'other' =&gt; array(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0 =&gt; 'Other',\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1 =&gt; 'Autre'\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ),\r\n\u00a0\u00a0\u00a0 ),\r\n\u00a0\u00a0\u00a0 'order' =&gt; array( \/\/Classement des \u00e9l\u00e9ments\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'friend' =&gt; 1,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'work' =&gt; 2,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'google' =&gt; 3,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'other' =&gt; 4,\r\n\u00a0\u00a0\u00a0 )\r\n);\r\n\r\n$this-&gt;addAttributeOption($websiteOptions);\r\n\r\n\/**\r\n\u00a0* Ajout de l'attribut aux formulaires n\u00e9cessaires\r\n\u00a0*\/\r\nMage::getModel('eav\/config')\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -&gt;getAttribute('customer', 'website_know')\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -&gt;setData('used_in_forms', array(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'adminhtml_customer',\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'checkout_register',\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'customer_account_create')\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 )\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -&gt;save();\r\n\r\n\/\/Ajout de l'attribut dans la table salesquote pour les cr\u00e9ation de comptes dans le checkout\r\n$tablequote = $this-&gt;getTable('sales\/quote');\r\n$installer-&gt;run(\"ALTER TABLE $tablequote ADD `website_know` INT(11) NOT NULL\");\r\n\r\n$installer-&gt;endSetup();\r\n<\/pre>\n<p>Dans ce fichier plusieurs \u00e9tapes sont importantes pour que le nouvel attribut cr\u00e9\u00e9 soit bien disponible dans les formulaires de cr\u00e9ation de compte.<\/p>\n<ul>\n<li>L&rsquo;ajout de l\u2019attribut aux formulaires :<\/li>\n<\/ul>\n<p>Il faut indiquer les formulaires pour lequel vous souhaitez que le nouvel attribut soit disponible. ( adminhtml_customer , checkout_register, customer_account_create dans notre cas)<\/p>\n<ul>\n<li>Ajout d&rsquo;un champ dans la table sales\/quote<\/li>\n<\/ul>\n<p>Cette \u00e9tape est uniquement n\u00e9cessaire si vous souhaitez ajouter votre attribut sur le formulaire checkout_register.<br \/>\nElle est combin\u00e9e avec les noeuds fieldset du formulaire de configuration, ,nous verrons plus loin leur fonctionnement en d\u00e9tail<\/p>\n<p>Nous pouvons maintenant installer le module, et vous pouvez constater que du c\u00f4t\u00e9 de l&rsquo;administration, le nouvel attribut est bien disponible et affich\u00e9 :<\/p>\n<p><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2015\/11\/customer-admin.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1194\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2015\/11\/customer-admin.jpg\" alt=\"Customer admin\" width=\"603\" height=\"550\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2015\/11\/customer-admin.jpg 603w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2015\/11\/customer-admin-300x274.jpg 300w\" sizes=\"auto, (max-width: 603px) 100vw, 603px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Partie Front Office<\/strong><\/p>\n<p>Passons maintenant au cot\u00e9 d\u00e9sign Front Office :<\/p>\n<p>Pour que notre nouvel attribut puisse \u00eatre \u00e9dit\u00e9, il faut donc maintenant afficher ce champ dans les formulaires.<\/p>\n<p>Le fichier de cr\u00e9ation du compte client standard est situ\u00e9 dans : app\/design\/frontend\/base\/default\/template\/persistent\/customer\/form\/register.phtml<br \/>\nLe fichier de cr\u00e9ation du compte client dans le checkout : app\/design\/frontend\/base\/default\/template\/checkout\/onepage\/billing.phtml<\/p>\n<p>Vous pouvez constatez que ces fichiers comportent le code suivant\u00a0 avant la fin du formulaire de cr\u00e9ation de compte.<\/p>\n<pre lang=\"php\" escaped=\"true\">&lt;?php echo $this-&gt;getChildHtml('form.additional.info'); ?&gt;\r\n<\/pre>\n<p>Nous allons ajouter le template de notre module sur cet \u00e9l\u00e9ment.<\/p>\n<p>Pour cela nous allons utiliser un fichier de layout pour r\u00e9aliser cette action.<br \/>\nCe fichier sera \u00e0 placer dans le dossier app\/design\/frontend\/base\/default\/layout\/hhennes_customer.xml<br \/>\nAvec le contenu suivant :<\/p>\n<pre lang=\"xml\" escaped=\"true\"> &lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;layout version=\"0.1.0\"&gt;\r\n\r\n\u00a0\u00a0\u00a0 &lt;!-- Ajout du champ suppl\u00e9mentaire dans le formulaire de cr\u00e9ation de compte --&gt;\r\n\u00a0\u00a0\u00a0 &lt;customer_account_create&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;reference name=\"form.additional.info\"&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;!-- On peut rajouter ici autant de blocks que souhait\u00e9s --&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;block type=\"core\/template\" name=\"hhennes.customer.fields\" as=\"hhennes.customer.fields\" template=\"hhennes\/customer\/form\/register.phtml\" \/&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/reference&gt;\r\n\u00a0\u00a0\u00a0 &lt;\/customer_account_create&gt;\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 &lt;!-- Ajout du champ suppl\u00e9mentaire dans le formulaire de cr\u00e9ation de compte du checkout --&gt;\r\n\u00a0\u00a0\u00a0 &lt;checkout_onepage_index&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;reference name=\"checkout.onepage.billing\"&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;reference name=\"form.additional.info\"&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;block type=\"core\/template\" name=\"hhennes.customer.fields\" as=\"hhennes.customer.fields\" template=\"hhennes\/customer\/form\/register.phtml\"&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;!-- On d\u00e9fini que le block est dane le checkout pour d\u00e9finir les variables --&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;action method=\"setData\"&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;name&gt;in_checkout&lt;\/name&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;value&gt;1&lt;\/value&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/action&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/block&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/reference&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/reference&gt;\r\n\u00a0\u00a0\u00a0 &lt;\/checkout_onepage_index&gt;\r\n\u00a0\u00a0 \u00a0\r\n&lt;\/layout&gt;\r\n<\/pre>\n<p>Pour \u00e9viter de cr\u00e9er des fichiers inutiles vous pouvez constater que je n&rsquo;utilise qu&rsquo;un seul template pour les 2 emplacements.<br \/>\nMais en passant une variable dans le cas du checkout.<\/p>\n<p>Le fichier est \u00e0 cr\u00e9er dans app\/design\/frontend\/base\/default\/default\/hhennes\/customer\/form\/register.phtml avec le contenu suivant :<\/p>\n<pre lang=\"php\" escaped=\"true\"> &lt;?php\r\n\/\/ Ce template est utilis\u00e9 dans le formulaire de cr\u00e9ation de compte standard et checkout\r\n\/\/ On d\u00e9termine le nom de la variable en fonction du contexte\r\nif ( $this-&gt;getData('in_checkout')) {\r\n\u00a0\u00a0\u00a0 $selectName = \"billing[website_know]\";\r\n}\r\nelse {\r\n\u00a0\u00a0\u00a0 $selectName = \"website_know\";\r\n}\r\n?&gt;\r\n&lt;li class=\"fields\"&gt;\r\n\u00a0\u00a0\u00a0 &lt;div class=\"field\"&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;label for=\"&lt;?php echo $selectName; ?&gt;\"&gt;&lt;?php echo $this-&gt;__('How do you know about this website'); ?&gt;&lt;\/label&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;div class=\"input-box\"&gt;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;?php\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/R\u00e9cup\u00e9ration des informations de l'attribut\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $attributeId = Mage::getResourceModel('eav\/entity_attribute')-&gt;getIdByCode('customer', 'website_know');\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $attribute = Mage::getModel('eav\/entity_attribute')-&gt;load($attributeId);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $attributeOptions = $attribute-&gt;getSource()-&gt;getAllOptions();\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/On utilise l'affichage standard d'un block html\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 echo $this-&gt;getLayout()-&gt;createBlock('core\/html_select')\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -&gt;setName($selectName)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -&gt;setId($selectName)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -&gt;setTitle($this-&gt;__('website_know'))\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -&gt;setClass('validate-select')\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -&gt;setOptions($attributeOptions)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 -&gt;getHtml();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ?&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/div&gt;\r\n\u00a0\u00a0\u00a0 &lt;\/div&gt;\r\n&lt;\/li&gt;\r\n<\/pre>\n<p>Nous avons \u00e0 pr\u00e9sent bien les nouveaux champs qui s&rsquo;affichent sur le front Office \u00e0 la fois sur le formulaire de cr\u00e9ation de compte standard, et checkout.<\/p>\n<p><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2015\/11\/customer-checkout.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1195\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2015\/11\/customer-checkout.jpg\" alt=\"customer-checkout\" width=\"420\" height=\"465\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2015\/11\/customer-checkout.jpg 420w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2015\/11\/customer-checkout-271x300.jpg 271w\" sizes=\"auto, (max-width: 420px) 100vw, 420px\" \/><\/a> <a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2015\/11\/customer-register.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1196\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2015\/11\/customer-register.jpg\" alt=\"customer-register\" width=\"524\" height=\"740\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2015\/11\/customer-register.jpg 524w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2015\/11\/customer-register-212x300.jpg 212w\" sizes=\"auto, (max-width: 524px) 100vw, 524px\" \/><\/a><\/p>\n<p>L&rsquo;enregistrement du nouvel attribut fonctionne d\u00e9j\u00e0 dans le formulaire de cr\u00e9ation de compte, mais pour l&rsquo;instant ce n&rsquo;est pas le cas dans le formulaire de checkout.<\/p>\n<p><strong>Enregistrement des informations de l&rsquo;attribut dans le formulaire cr\u00e9ation du checkout<\/strong><\/p>\n<p>Lors de l&rsquo;enregistrement d&rsquo;un client depuis le formulaire de cr\u00e9ation du checkout, le processus est un peu particulier.<br \/>\nJ&rsquo;avais cherch\u00e9 pas mal d&rsquo;informations sur le sujet , mais je n&rsquo;ai trouv\u00e9 aucun article expliquant le processus complet, voici donc un r\u00e9capitulatif du fonctionnement.<\/p>\n<p>Les donn\u00e9es sont associ\u00e9es au panier client ( table :\u00a0 sales_flat_quote\/ ), il faut donc que notre champ puisse y \u00eatre associ\u00e9.<br \/>\nC&rsquo;est pourquoi dans notre fichier d&rsquo;installation le code suivant est pr\u00e9sent :<\/p>\n<pre lang=\"php\" escaped=\"true\">\/\/Ajout de l'attribut dans la table salesquote pour les cr\u00e9ation de comptes dans le checkout\r\n$tablequote = $this-&gt;getTable('sales\/quote');\r\n$installer-&gt;run(\"ALTER TABLE $tablequote ADD `website_know` INT(11) NOT NULL\");\r\n<\/pre>\n<p>L&rsquo;association des donn\u00e9es client au panier est r\u00e9alis\u00e9e dans le fichier : app\/code\/core\/Mage\/Checkout\/Model\/Type\/Onepage\/OnePage.php dans la fonction _validateCustomerData() via le code :<\/p>\n<pre lang=\"php\" escaped=\"true\">Mage::helper('core')-&gt;copyFieldset('customer_account', 'to_quote', $customer, $quote);\r\n<\/pre>\n<p>Les donn\u00e9es fieldset sont r\u00e9cup\u00e9r\u00e9es depuis le fichier de configuration du module ( config.xml ) dans les noeuds fieldsets<br \/>\nAfin que les donn\u00e9es soient copi\u00e9es lors de cette \u00e9tape il est donc n\u00e9cessaire d&rsquo;avoir les informations suivantes :<\/p>\n<pre lang=\"xml\" escaped=\"true\">&lt;fieldsets&gt;\r\n&lt;customer_account&gt; &lt;!-- Nom du fieldset --&gt;\r\n\u00a0\u00a0 \u00a0&lt;website_know&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;create&gt;1&lt;\/create&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;update&gt;1&lt;\/update&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;to_quote&gt;*&lt;\/to_quote&gt; &lt;!-- Nom du fieldset de destination--&gt;\r\n\u00a0\u00a0 \u00a0&lt;\/website_know&gt;\r\n&lt;\/customer_account&gt;\r\n&lt;\/fieldsets&gt;\r\n<\/pre>\n<p>Une fois cette information ajout\u00e9es, les donn\u00e9es de notre attribut seront bien pr\u00e9sentes dans la table des paniers.<br \/>\nCependant l&rsquo;information ne sera pas encore stock\u00e9e dans les donn\u00e9es du client.<\/p>\n<p>Pour finir il faut encore que les donn\u00e9es de notre attribut soit copi\u00e9es du panier vers le client.<br \/>\nCette association est fait dans la fonction _prepareNewCustomerQuote() via le code :<\/p>\n<pre lang=\"php\" escaped=\"true\">Mage::helper('core')-&gt;copyFieldset('checkout_onepage_quote', 'to_customer', $quote, $customer);\r\n<\/pre>\n<p>C&rsquo;est pourquoi il faut encore rajouter les informations suivantes dans le noeud fieldset du fichier de configuration, \u00e0 la suite de customer_account.<\/p>\n<pre lang=\"xml\" escaped=\"true\"> &lt;checkout_onepage_quote&gt;\r\n\u00a0\u00a0 \u00a0&lt;website_know&gt;\r\n\u00a0\u00a0 \u00a0&lt;to_customer&gt;*&lt;\/to_customer&gt;&gt;\r\n\u00a0\u00a0 \u00a0&lt;\/website_know&gt;\r\n&lt;\/checkout_onepage_quote&gt;\r\n<\/pre>\n<p>Une fois cela termin\u00e9s, les donn\u00e9es de l\u2019attribut client seront bien prises en compte dans tous les cas.<\/p>\n<p>Pour tout ceux qui ne veulent pas se creuser la t\u00eate, le module est disponible sur github : <a href=\"https:\/\/github.com\/nenes25\/magento_customer\">https:\/\/github.com\/nenes25\/magento_customer<\/a><br \/>\nSi vous avez compris le principe il sera facile de rajouter rapidement d&rsquo;autres attributs en utilisant cette m\u00e9thodologie.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Une mise \u00e0 jour de cet article pour Magento 2 est disponible : Magento 2 : Ajouter des nouveaux attributs aux formulaires de cr\u00e9ation de compte Dans cet article nous allons voir ensemble comment ajouter proprement un nouvel attribut client qui sera affich\u00e9 dans les formulaires suivants Cr\u00e9ation de compte ( normal ) Cr\u00e9ation de [&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":[246],"tags":[239,383,402,401,150],"class_list":["post-1192","post","type-post","status-publish","format-standard","hentry","category-magento-2","tag-checkout","tag-client","tag-customer-attribute","tag-formulaires","tag-magento"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1192","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=1192"}],"version-history":[{"count":5,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1192\/revisions"}],"predecessor-version":[{"id":1580,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1192\/revisions\/1580"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=1192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=1192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=1192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}