我有一个Magento网站,可以通过API更新产品数据和图像。设置了两个商店视图,具有相同的产品但价格不同。 由于某种原因,图像不是由API脚本生成的,所以我有时会得到重复的结果。我也无法从管理员端手动删除它们。 我在使用我在网上找到的数据库修复程序之前更正了一次该问题,但我无法记住修复程序所针对的表格,我无法再找到它。 我所知道的是,这与两家商店略有不同有关。 有没有其他人有这个问题或指出我正确的方向,以编辑哪些数据库表来纠正这个问题? 感谢。
答案 0 :(得分:0)
有一个扩展名: 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;
}
}
}
}
答案 1 :(得分:0)
在进一步观察之后,我发现了我的追求。我需要编辑catalogue_product_entity_x表(其中x是int,decimal,datetime,int和varchar)删除第二个商店的条目,从而使Magento使用默认值。
我还有第三家商店,这是我最初设置的遗物,我删除了。这可能会产生影响,但我第一次遇到这个问题时并不需要这样做。
我在这里找到了解决方案:SO link
但这里是db命令以便于参考:
DELETE FROM catalog_product_entity_text
其中store_id = 2;
DELETE FROM catalog_product_entity_datetime
其中store_id = 2;
DELETE FROM catalog_product_entity_decimal
其中store_id = 2;
DELETE FROM catalog_product_entity_int
其中store_id = 2;
从catalog_product_entity_varchar
删除,其中store_id = 2;
感谢。
编辑: 这只是部分解决方案。虽然它确实通过重置图像来纠正第二个存储的问题,从而允许我删除它们,如果你执行上面的sql语句,一切都默认为默认存储。因此,如果您有不同的价格或任何其他数据,它将开始显示第二个商店的默认值,而不是它应显示的数据。 更好的解决方案,如果你被迫沿着这条路走下去,那就是只运行图像的sql语句。 如果我弄清楚这一点,我会在这里发布。