{"id":687,"date":"2014-08-19T12:04:33","date_gmt":"2014-08-19T10:04:33","guid":{"rendered":"http:\/\/www.h-hennes.fr\/blog\/?p=687"},"modified":"2014-08-19T12:04:33","modified_gmt":"2014-08-19T10:04:33","slug":"magento-importer-exporter-les-produits-complementaire-upsell-crossell-related-via-les-profils-avances","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2014\/08\/19\/magento-importer-exporter-les-produits-complementaire-upsell-crossell-related-via-les-profils-avances\/","title":{"rendered":"Magento : Importer \/ Exporter les produits compl\u00e9mentaire ( upsell , crossell , related ) via les profils avanc\u00e9s"},"content":{"rendered":"<p>Suivant la m\u00eame m\u00e9thodologie que l&rsquo;import export des commentaires clients, nous allons voir \u00e0 pr\u00e9sent comment importer\/ exporter les produits compl\u00e9mentaires.<\/p>\n<p>Nous partons du postulat que nous cr\u00e9ons un nouveau module \u00ab\u00a0Module_Dataflow\u00a0\u00bb<br \/>\n( les \u00e9tapes de cr\u00e9ation du module ne seront pas d\u00e9taill\u00e9es )<\/p>\n<p>Cette m\u00e9thode fonctionne pour les \u00e9l\u00e9ments suivants :<\/p>\n<ul>\n<li>Produits apparent\u00e9s<\/li>\n<li>Ventes incitatives<\/li>\n<li>Ventes crois\u00e9es<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Voici le xml pour l&rsquo;export des produits compl\u00e9mentaires<\/p>\n<pre lang=\"xml\" escaped=\"true\">&lt;action type=\"mymodule_dataflow\/convert_parser_LinkedProducts\" method=\"unparse\"&gt;\r\n&lt;!-- Filtrage par produit &lt;var name=\"product_id\" &gt;157&lt;\/var&gt; --&gt;\r\n&lt;!-- Filtrage par type export ( upsell|crossel|related) defaut : upsell ) &lt;var name=\"type\"&gt;upsell&lt;\/var&gt; --&gt;\r\n&lt;\/action&gt;\r\n&lt;action type=\"dataflow\/convert_mapper_column\" method=\"map\"&gt;\r\n&lt;\/action&gt;\r\n&lt;action type=\"dataflow\/convert_parser_csv\" method=\"unparse\"&gt;\r\n&lt;var name=\"delimiter\"&gt;&lt;![CDATA[;]]&gt;&lt;\/var&gt;\r\n&lt;var name=\"enclose\"&gt;&lt;![CDATA[\"]]&gt;&lt;\/var&gt;\r\n&lt;var name=\"fieldnames\"&gt;true&lt;\/var&gt;\r\n&lt;\/action&gt;\r\n&lt;action type=\"dataflow\/convert_adapter_io\" method=\"save\"&gt;\r\n&lt;var name=\"type\"&gt;file&lt;\/var&gt;\r\n&lt;var name=\"path\"&gt;var\/export&lt;\/var&gt;\r\n&lt;var name=\"filename\"&gt;&lt;![CDATA[exports-produits-complementaires.csv]]&gt;&lt;\/var&gt;\r\n&lt;\/action&gt;\r\n<\/pre>\n<p>Voici le xml d&rsquo;import des produits ( Le type d&rsquo;import est d\u00e9termin\u00e9 par le nom des colonnes du fichier )<\/p>\n<pre lang=\"xml\" escaped=\"true\">&lt;action type=\"dataflow\/convert_adapter_io\" method=\"load\"&gt;\r\n&lt;var name=\"type\"&gt;file&lt;\/var&gt;\r\n&lt;var name=\"path\"&gt;var\/import&lt;\/var&gt;\r\n&lt;var name=\"filename\"&gt;&lt;![CDATA[produits complementaires.csv]]&gt;&lt;\/var&gt;\r\n&lt;var name=\"format\"&gt;&lt;![CDATA[csv]]&gt;&lt;\/var&gt;\r\n&lt;\/action&gt;\r\n&lt;action type=\"dataflow\/convert_parser_csv\" method=\"parse\"&gt;\r\n&lt;var name=\"delimiter\"&gt;&lt;![CDATA[;]]&gt;&lt;\/var&gt;\r\n&lt;var name=\"enclose\"&gt;&lt;![CDATA[\"]]&gt;&lt;\/var&gt;\r\n&lt;var name=\"fieldnames\"&gt;true&lt;\/var&gt;\r\n&lt;var name=\"number_of_records\"&gt;1&lt;\/var&gt;\r\n&lt;var name=\"decimal_separator\"&gt;&lt;![CDATA[.]]&gt;&lt;\/var&gt;\r\n&lt;var name=\"adapter\"&gt;mymodule_dataflow\/convert_parser_LinkedProducts&lt;\/var&gt;\r\n&lt;var name=\"method\"&gt;parse&lt;\/var&gt;\r\n&lt;\/action&gt;\r\n<\/pre>\n<p>Voici le code qui g\u00e8re l&rsquo;import<\/p>\n<pre lang=\"php\" escaped=\"true\">\r\n&lt;?php\r\n\r\n\/**\r\n* Import des produits apparent\u00e9s\r\n* Import des ventes incitatives\r\n* Import des ventes crois\u00e9es\r\n*\r\n*\/\r\nclass MyModule_DataFlow_Model_Convert_Parser_LinkedProducts extends Mage_Eav_Model_Convert_Parser_Abstract {\r\n\r\n\r\n\r\npublic function parse() {\r\n\r\n$batchModel = Mage::getSingleton('dataflow\/batch');\r\n\r\n$batchImportModel = $batchModel-&gt;getBatchImportModel();\r\n$importIds = $batchImportModel-&gt;getIdCollection();\r\n\r\nforeach ($importIds as $importId) {\r\n$batchImportModel-&gt;load($importId);\r\n$importData = $batchImportModel-&gt;getBatchData();\r\n$this-&gt;saveRow($importData);\r\n}\r\n}\r\n\r\n\/**\r\n* Import des donn\u00e9es\r\n* @param type $importData\r\n*\/\r\npublic function saveRow($importData) {\r\n\r\n\/\/En fonction du nom de la colonne\u00a0 ( upsell_1 | related_1 | crossel_1 ) on d\u00e9termine quel import doit \u00eatre ex\u00e9cut\u00e9\r\nif (array_key_exists('related_1', $importData)){\r\n$mode = 'related';\r\n$method = 'setRelatedLinkData';\r\n}\r\nelse if (array_key_exists('crossel_1', $importData)) {\r\n$mode = 'crossel';\r\n$method = 'setCrossSellLinkData';\r\n}\r\nelse {\r\n$mode = 'upsell';\r\n$method = 'setUpSellLinkData';\r\n}\r\n\r\n\/\/Chargement du produit\r\n$productId = Mage::getModel('catalog\/product')-&gt;getIdBySku($importData['sku']);\r\n\r\nif (!$productId)\r\nreturn false;\r\n\r\n$product = Mage::getModel('catalog\/product')-&gt;load($productId);\r\n$complementaryProducts = array();\r\n\r\n$i = 1;\r\nforeach ($importData as $key =&gt; $data ) {\r\n\r\nif (preg_match('#^' . $mode . '#', $key) &amp;&amp; $data != '') {\r\n\r\n$complementaryProductId = Mage::getModel('catalog\/product')-&gt;getIdBySku($data);\r\nif ( !$complementaryProductId ) {\r\n\/\/echo 'Produit '.$data.'n\\'existe pas';\r\ncontinue;\r\n}\r\n\r\n$complementaryProducts[$complementaryProductId] = array('position' =&gt; $i);\r\n$i++;\r\n}\r\n}\r\n$product-&gt;{$method}($complementaryProducts);\r\n$product-&gt;save();\r\n}\r\n\r\n\r\n\r\n\r\n\/**\r\n* Export des donn\u00e9es\r\n*\/\r\npublic function unparse() {\r\n\r\n$productId = $this-&gt;getVar('product_id'); \/\/Filtrage par produit\r\n$exportType = $this-&gt;getVar('type'); \/\/Mode d'export\r\n\r\n$products = Mage::getModel('catalog\/product')-&gt;getCollection();\r\n\r\nif ($productId)\r\n$products-&gt;addFieldToFilter('entity_id', $productId);\r\n\r\nforeach ($products as $product) {\r\n\r\n$product-&gt;load($product-&gt;getEntityId());\r\n\r\nif ($exportType == 'related') \/\/Produit li\u00e9\r\n$complementaryProducts = $product-&gt;getRelatedProducts();\r\nelse if ($exportType == 'crossel')\r\n$complementaryProducts = $product-&gt;getCrossSellProducts();\r\nelse {\r\n$complementaryProducts = $product-&gt;getUpSellProducts();\r\n$exportType = 'upsell';\r\n}\r\n\r\n\r\nif (sizeof($complementaryProducts)) {\r\n$rowData = array();\r\n$rowData['sku'] = $product-&gt;getSku();\r\n$rowData['product_name'] = $product-&gt;getName(); \/\/Cl\u00e9 volontairement chang\u00e9e pour ne pas \u00eatre import\u00e9e\r\n$i = 1;\r\nforeach ($complementaryProducts as $complementaryProduct) {\r\n$rowData[$exportType . '_' . $i] = $complementaryProduct-&gt;getSku();\r\n$i++;\r\n}\r\n\r\n$batchExport = $this-&gt;getBatchExportModel()\r\n-&gt;setId(null)\r\n-&gt;setBatchId($this-&gt;getBatchModel()-&gt;getId())\r\n-&gt;setBatchData($rowData)\r\n-&gt;setStatus(1)\r\n-&gt;save();\r\n}\r\n}\r\n}\r\n\r\n}\r\n\r\n?&gt;\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Suivant la m\u00eame m\u00e9thodologie que l&rsquo;import export des commentaires clients, nous allons voir \u00e0 pr\u00e9sent comment importer\/ exporter les produits compl\u00e9mentaires. Nous partons du postulat que nous cr\u00e9ons un nouveau module \u00ab\u00a0Module_Dataflow\u00a0\u00bb ( les \u00e9tapes de cr\u00e9ation du module ne seront pas d\u00e9taill\u00e9es ) Cette m\u00e9thode fonctionne pour les \u00e9l\u00e9ments suivants : Produits apparent\u00e9s Ventes [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","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,6],"tags":[],"class_list":["post-687","post","type-post","status-publish","format-standard","hentry","category-magento-2","category-trucs-et-astuces"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/687","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=687"}],"version-history":[{"count":1,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/687\/revisions"}],"predecessor-version":[{"id":688,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/687\/revisions\/688"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=687"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=687"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}