将产品默认映像更新为映像库中的第一个映像


Update product default image to first image in image gallery

我有一个导入脚本,可以导入超过2000 +产品,包括它们的图像。我通过 CLI 运行此脚本,因为我觉得这是速度方面的最佳方式,即使我在 magento 管理员处有相同的导入脚本可用且可执行作为扩展。脚本运行得很好。近乎完美!但是,有时addToImageGallery会以某种方式出现故障,并导致某些图像No Image为默认产品图像,而唯一未选择其他图像作为默认值的图像。如何批量更新所有产品,将产品介质库中的第一个图像设置为默认的"基本"、"图像"和"缩略图"图像?

我在此链接上发现了一些执行此操作(以及更多)的技巧:

http://www.magentocommerce.com/boards/viewthread/59440/(谢谢 transio!

虽然,对于Magento 1.6.2.0(我使用),那里的第一个SQL技巧(技巧1 - 自动设置默认基础,拇指,小图像到第一个图像)需要一些修改。

在倒数第二行有一个AND ev.attribute_id IN (70, 71, 72)部分。这应该指向属性ID,该属性ID在Magento 1.6.2.0中可能不再相关。为了解决这个问题,使用任何MySQL查询工具(PHPMyAdmin或MySQL查询浏览器),我查看了catalog_product_entity_varchar表。应该有这样的条目:

value_id, entity_type_id, attribute_id, store_id, entity_id, value
..
146649, 4, 116, 0, 1, '2'
146650, 4, 76, 0, 1, ''
146651, 4, 78, 0, 1, ''
146652, 4, 79, 0, 1, '/B/0/B05-01.jpg'
146653, 4, 80, 0, 1, '/B/0/B05-01.jpg'
146654, 4, 81, 0, 1, '/B/0/B05-01.jpg'
146655, 4, 96, 0, 1, ''
146656, 4, 100, 0, 1, ''
146657, 4, 102, 0, 1, 'container2'
..

我的钱在三个图像路径的组上,作为可能的替代品。所以现在生成的 SQL 应该是:

UPDATE catalog_product_entity_media_gallery AS mg,
    catalog_product_entity_media_gallery_value AS mgv,
    catalog_product_entity_varchar AS ev
SET ev.value = mg.value
WHERE  mg.value_id = mgv.value_id
    AND mg.entity_id = ev.entity_id
    AND ev.attribute_id IN (79, 80, 81) # <-- attribute IDs updated here
    AND mgv.position = 1;

所以我承诺了它,运行它,然后.. 普雷斯托!全部固定!如果需要,您可能还希望将其封装在事务中。但这超出了这个问题的范围。

好吧,这是到目前为止对我有用的修复程序!如果还有更多,请分享!

有:

146652, 4, 79, 0, 1, '/B/0/B05-01.jpg'
146653, 4, 80, 0, 1, '/B/0/B05-01.jpg'
146654, 4, 81, 0, 1, '/B/0/B05-01.jpg'

所以它应该是:

和 ev.attribute_id IN (79, 80, 81) # <-- 此处更新的属性 ID

而不是:

和 ev.attribute_id IN (78, 80, 81) # <-- 属性 ID 在此处更新

正在寻找类似的东西。

UPDATE catalog_product_entity_media_gallery AS mg,
    catalog_product_entity_media_gallery_value AS mgv,
    catalog_product_entity_varchar AS ev
SET ev.value = mg.value
WHERE  mg.value_id = mgv.value_id
    AND mg.entity_id = ev.entity_id
    AND ev.attribute_id IN (79, 80, 81) # <-- attribute IDs updated here
    AND mgv.position = 1;