无法从 magento admin 中删除重复的图像

Can't delete duplicate images from magento admin

我有一个 Magento 网站,它通过 API 获取更新的产品数据和图像。设置了两个商店视图,产品相同但价格不同。 出于某种原因,图像不是由 API 脚本生成的,所以我有时会得到重复的图像。我也无法从管理员端手动删除它们。 在使用我在网上找到的数据库修复程序之前,我纠正了这个问题一次,但我不记得该修复程序针对的是哪些表,而且我再也找不到它。 我所知道的是,这与两家商店略有不同有关。 有没有其他人遇到过这个问题或指出我要编辑哪些数据库表来纠正这个问题的正确方向? 谢谢。

有一个扩展: http://www.magentocommerce.com/magento-connect/remove-duplicate-product-image.html

还有一个小脚本可以在 Magento 中查找和删除所有重复的图像:

include(‘app/Mage.php’);
//Mage::App(‘default’);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
error_reporting(E_ALL | E_STRICT);
Mage::setIsDeveloperMode(true);
ini_set(‘display_errors’, 1);
ob_implicit_flush (1);
$mediaApi = Mage::getModel(“catalog/product_attribute_media_api”);
$_products = Mage::getModel(‘catalog/product’)->getCollection();
$i =0;
$total = count($_products);
$count = 0;
foreach($_products as $_prod)
{
$_product = Mage::getModel(‘catalog/product’)->load($_prod->getId());
$_md5_values = array();
//protected base image
$base_image = $_product->getImage();
if($base_image != ‘no_selection’)
{
$filepath = Mage::getBaseDir(‘media’) .’/catalog/product’ . $base_image ;
if(file_exists($filepath))
$_md5_values[] = md5(file_get_contents($filepath));
}
$i ++;
echo “\r\n processing product $i of $total “;
// Loop through product images
$_images = $_product->getMediaGalleryImages();
if($_images){
foreach($_images as $_image){
//protected base image
if($_image->getFile() == $base_image)
continue;
$filepath = Mage::getBaseDir(‘media’) .’/catalog/product’ . $_image->getFile() ;
if(file_exists($filepath))
$md5 = md5(file_get_contents($filepath));
else
continue;
if(in_array($md5, $_md5_values))
{
$mediaApi->remove($_product->getId(), $_image->getFile());
echo “\r\n removed duplicate image from “.$_product->getSku();
$count++;
} else {
$_md5_values[] = $md5;
}
}
}
}

进一步查看后,我找到了我想要的东西。我需要编辑 catalogue_product_entity_x 表(其中 x 是 int、decimal、datetime、int 和 varchar)删除第二个存储的条目,从而使 Magento 使用默认值。 我还有第三家商店,这是我删除的初始设置的遗物。这可能会产生影响,但我第一次遇到这个问题时不需要这样做。 我在这里找到了解决方案:SO link 但这里是 db 命令以供参考: 从 catalog_product_entity_text 中删除 store_id = 2; 从 catalog_product_entity_datetime 中删除 store_id = 2; 从 catalog_product_entity_decimal 中删除 store_id = 2; 从 catalog_product_entity_int 中删除 store_id = 2; 从 catalog_product_entity_varchar 中删除 store_id = 2;

  • 当然要将store_id改成相关的id。

谢谢。

编辑: 这只是部分解决方案。虽然它确实通过重置图像纠正了第二家商店的问题,从而允许我删除它们,但如果您执行上面的 sql 语句,则所有内容都默认为默认商店。因此,如果您有不同的价格或任何其他数据,它将开始显示第二家商店的默认值,而不是它应该显示的数据。 更好的解决方案,如果你被迫沿着这条路走下去,那就是只对图像使用 运行 sql 语句。 如果我弄明白了,我会 post 放在这里。