Cet article est assez ancien, malgré toute l'attention que j' apporte à mes contenus il est possible que celui-ci ne soit plus d'actualité.
N'hésitez pas à me le signaler si nécessaire via le formulaire de contact.
N'hésitez pas à me le signaler si nécessaire via le formulaire de contact.
Suivant la même méthodologie que l’import export des commentaires clients, nous allons voir à présent comment importer/ exporter les produits complémentaires.
Nous partons du postulat que nous créons un nouveau module « Module_Dataflow »
( les étapes de création du module ne seront pas détaillées )
Cette méthode fonctionne pour les éléments suivants :
- Produits apparentés
- Ventes incitatives
- Ventes croisées
Voici le xml pour l’export des produits complémentaires
<action type="mymodule_dataflow/convert_parser_LinkedProducts" method="unparse"> <!-- Filtrage par produit <var name="product_id" >157</var> --> <!-- Filtrage par type export ( upsell|crossel|related) defaut : upsell ) <var name="type">upsell</var> --> </action> <action type="dataflow/convert_mapper_column" method="map"> </action> <action type="dataflow/convert_parser_csv" method="unparse"> <var name="delimiter"><![CDATA[;]]></var> <var name="enclose"><![CDATA["]]></var> <var name="fieldnames">true</var> </action> <action type="dataflow/convert_adapter_io" method="save"> <var name="type">file</var> <var name="path">var/export</var> <var name="filename"><![CDATA[exports-produits-complementaires.csv]]></var> </action> |
Voici le xml d’import des produits ( Le type d’import est déterminé par le nom des colonnes du fichier )
<action type="dataflow/convert_adapter_io" method="load"> <var name="type">file</var> <var name="path">var/import</var> <var name="filename"><![CDATA[produits complementaires.csv]]></var> <var name="format"><![CDATA[csv]]></var> </action> <action type="dataflow/convert_parser_csv" method="parse"> <var name="delimiter"><![CDATA[;]]></var> <var name="enclose"><![CDATA["]]></var> <var name="fieldnames">true</var> <var name="number_of_records">1</var> <var name="decimal_separator"><![CDATA[.]]></var> <var name="adapter">mymodule_dataflow/convert_parser_LinkedProducts</var> <var name="method">parse</var> </action> |
Voici le code qui gère l’import
<?php /** * Import des produits apparentés * Import des ventes incitatives * Import des ventes croisées * */ class MyModule_DataFlow_Model_Convert_Parser_LinkedProducts extends Mage_Eav_Model_Convert_Parser_Abstract { public function parse() { $batchModel = Mage::getSingleton('dataflow/batch'); $batchImportModel = $batchModel->getBatchImportModel(); $importIds = $batchImportModel->getIdCollection(); foreach ($importIds as $importId) { $batchImportModel->load($importId); $importData = $batchImportModel->getBatchData(); $this->saveRow($importData); } } /** * Import des données * @param type $importData */ public function saveRow($importData) { //En fonction du nom de la colonne ( upsell_1 | related_1 | crossel_1 ) on détermine quel import doit être exécuté if (array_key_exists('related_1', $importData)){ $mode = 'related'; $method = 'setRelatedLinkData'; } else if (array_key_exists('crossel_1', $importData)) { $mode = 'crossel'; $method = 'setCrossSellLinkData'; } else { $mode = 'upsell'; $method = 'setUpSellLinkData'; } //Chargement du produit $productId = Mage::getModel('catalog/product')->getIdBySku($importData['sku']); if (!$productId) return false; $product = Mage::getModel('catalog/product')->load($productId); $complementaryProducts = array(); $i = 1; foreach ($importData as $key => $data ) { if (preg_match('#^' . $mode . '#', $key) && $data != '') { $complementaryProductId = Mage::getModel('catalog/product')->getIdBySku($data); if ( !$complementaryProductId ) { //echo 'Produit '.$data.'n\'existe pas'; continue; } $complementaryProducts[$complementaryProductId] = array('position' => $i); $i++; } } $product->{$method}($complementaryProducts); $product->save(); } /** * Export des données */ public function unparse() { $productId = $this->getVar('product_id'); //Filtrage par produit $exportType = $this->getVar('type'); //Mode d'export $products = Mage::getModel('catalog/product')->getCollection(); if ($productId) $products->addFieldToFilter('entity_id', $productId); foreach ($products as $product) { $product->load($product->getEntityId()); if ($exportType == 'related') //Produit lié $complementaryProducts = $product->getRelatedProducts(); else if ($exportType == 'crossel') $complementaryProducts = $product->getCrossSellProducts(); else { $complementaryProducts = $product->getUpSellProducts(); $exportType = 'upsell'; } if (sizeof($complementaryProducts)) { $rowData = array(); $rowData['sku'] = $product->getSku(); $rowData['product_name'] = $product->getName(); //Clé volontairement changée pour ne pas être importée $i = 1; foreach ($complementaryProducts as $complementaryProduct) { $rowData[$exportType . '_' . $i] = $complementaryProduct->getSku(); $i++; } $batchExport = $this->getBatchExportModel() ->setId(null) ->setBatchId($this->getBatchModel()->getId()) ->setBatchData($rowData) ->setStatus(1) ->save(); } } } } ?> |
Merci pour ces détails précis .
Je débute depuis 3 mois sur les export / imports de masse , c est vraiment un gain de temps énorme .
Par contre lorsque l on re-créer un attribut en BO celui n est pas pris en compte ds l’export ou l import …j essaye désespérément ….une idée ?
Merci
Bonjour,
Il faudrait être plus précis dans la description de votre problème.
Quel genre d’import / exports utilisez vous ? ( produits / clients / commandes / perso )
Quel type d’attribut est modifié ? est-ce que les valeurs sont liés à des sites / stores différents ?
Cordialement,
Quel réactivité 🙂
J’ai crée un attribut dans catalogue produit que j’ai appelé » mpn »
Dans le back office il est bien placé avec le jeux/groupe d’attribut de notre site web .
Sur notre site nous avons « matché » le champ sku pour avoir les mêmes codes que nos fournisseurs et donc mettre à jour les produits , des codes barres / douane plus facilement …
Ce matin j’ai rentré 300 codes barres d’un coup en creant un nouvel attribut « gtin » , ensuite j’import un tableau excel ( de mon fournisseur ) avec 1 colonne sku et la nouvelle colonne « gtin », en passant par le scrip d’import …nickel …par contre impossible avec le nouvel attribut …le module fonctionne , mais auccune import.
Mon fichier csv est bien codé en UTF8 …