Our client likes to leave images on media/import folder and when they import csv, if product image already existed, it was creating duplicate image.
So below is a quick workaround to fix this issue. Here we are just deleting previous images if we are going to re-import them again.
There could be a simpler solution but this worked for me.
@file app/code/core/Mage/Catalog/Model/Convert/Adapter/Product.php // @method public function saveRow( array $importData ) $attributes = $product->getTypeInstance()->getSetAttributes(); if (isset($attributes['media_gallery'])) { $gallery = $attributes['media_gallery']; //Get the images $galleryData = $product->getMediaGallery(); $csvImages = array(); if ( !empty( $importData['gallery'] ) ) { $csvImages = explode( ',', $importData["gallery"] ); } $csvImages[] = $importData['image']; foreach($csvImages as $img){ $importDataImage = explode('/',trim($importData['image'],'/')); $importDataImage = array_pop($importDataImage); // get filename part only $importDataImage = str_replace('\\', '/', Mage_Core_Model_File_Uploader::getDispretionPath($importDataImage) . '/' . $importDataImage); // replace windows directory_separator with linux one $galleryData['images'][]['file'] = $importDataImage; /* add this new image file from csv to list of images that needs to be removed if that exists. */ } // now delete all previous images. if (!empty($galleryData)) { foreach ($galleryData['images'] as $image) { //If image exists if ($gallery->getBackend()->getImage($product, $image['file'])) { $gallery->getBackend()->removeImage($product, $image['file']); } $imageOldFile = Mage::getBaseDir('media') . DS . 'catalog' . DS . 'product' . $image['file']; /*delete any previous image imports, that still exists on the server*/ if (file_exists($imageOldFile)) { unlink($imageOldFile); } } } }
After you delete previous images, you can proceed with core code that will re-import image from media/import.
arpit raka posted on - Thursday 5th of February 2015 06:16:50 AM