magento - 将产品默认图像更新为图库中的第一张图像

时间:2012-06-03 12:59:17

标签: magento php mage

我有一个导入脚本,可以导入超过2000多种产品,包括他们的图像。我通过CLI运行这个脚本,因为我觉得这是速度快的最好的方法,即使我有相同的导入脚本可用并在magento admin作为扩展可执行。脚本运行得很好。几乎完美!但是,有时addToImageGallery会以某种方式发生故障并导致某些图像的No Image作为默认产品图像,而唯一的其他图像则根本未选择为默认图像。如何批量更新所有产品以将产品的媒体库中的第一个图像设置为默认的“基本”,“图像”和“缩略图”图像?

3 个答案:

答案 0 :(得分:6)

我在这个链接上发现了这个(以及更多)的一些技巧:

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

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

在倒数第二行,有一个AND ev.attribute_id IN (70, 71, 72)部分。这应该指向属性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;

所以我致力于它,运行它并且.. presto!全部固定!如果需要,您可能还希望将其封装在事务中。但这不属于这个问题的范围。

嗯,这是迄今为止对我有用的修复方法!如果还有更多,请分享!

答案 1 :(得分:1)

有:

  

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

所以它应该是:

  

AND ev.attribute_id IN(79,80,81)#&lt; - 此处更新的属性ID

而不是:

  

AND ev.attribute_id IN(78,80,81)#&lt; - 此处更新的属性ID

正在寻找类似的东西。

答案 2 :(得分:1)

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;