我正在使用以下代码将图像添加到 Magento 中的现有产品中。
Mage::app()->setCurrentStore($target_store);
$product = Mage::getModel("catalog/product")->loadByAttribute($sku);
$product->addImageToMediaGallery(
$local_img_path,
array('image', 'thumbnail', 'small_image'),
false,
false
);
$product->save();
一旦我对所有需要更新/添加的产品执行此操作,我就会重新索引所有并清除缓存。图像不会显示在产品的管理区域中。但是图像确实显示在前端产品详细信息页面上,但不在类别列表页面上的小图像上。
查看数据库,catalog_product_entity_varchar 中有以下 3 个与产品相关的条目:
value_id entity_type_id attribute_id store_id entity_id value 888509 4 79 4 35743 /t/e/tempimg_791.jpg 888332 4 80 4 35743 /t/e/tempimg_791.jpg 888333 4 81 4 35743 /t/e/tempimg_791.jpg
前端商店有基本、小和拇指图像。现在,如果我运行以下 SQL 查询以查找 catalog_product_entity_varchar 中具有 store_id 4 和 attribute_id 79 且没有 store_id 0 的相应条目的所有行,并创建相应的行:
插入到 catalog_product_entity_varchar (entity_type_id、attribute_id、store_id、entity_id、值) SELECT DISTINCT 4、79、0、entity_id、值 FROM catalog_product_entity_varchar AS cpev 其中attribute_id = 79 AND store_id != 0 AND entity_id 在 ( 选择实体 ID FROM catalog_product_entity_varchar 其中 store_id = 4 AND 属性 ID = 79 AND entity_id 不是 在 ( 选择实体 ID FROM catalog_product_entity_varchar 哪里 store_id = 0 AND 属性 ID = 79 ) ) 在重复密钥更新值 = cpev.value;
然后再次执行相同操作两次,将 79 替换为 80,然后再次替换为 81,我在 catalog_product_entity_varchar 中得到以下相关行:
value_id entity_type_id attribute_id store_id entity_id value 888509 4 79 4 35743 /t/e/tempimg_791.jpg 888332 4 80 4 35743 /t/e/tempimg_791.jpg 888333 4 81 4 35743 /t/e/tempimg_791.jpg 888605 4 79 0 35743 /t/e/tempimg_791.jpg 888606 4 80 0 35743 /t/e/tempimg_791.jpg 888607 4 81 0 35743 /t/e/tempimg_791.jpg
图像现在显示在类别列表的前端,但仍然不在产品的管理区域中。
现在,我执行以下查询,以在 catalog_product_entity_media_gallery 中添加一个条目,表示已在先前查询中设置的图像:
插入到 catalog_product_entity_media_gallery(attribute_id、entity_id、值) SELECT 82, entity_id, value FROM catalog_product_entity_varchar AS cpev 其中attribute_id = 79 AND store_id = 0 AND entity_id IN ( 选择实体 ID FROM catalog_product_entity_varchar 其中 store_id = 4 AND 属性 ID = 79 AND entity_id 不在( 选择实体 ID FROM catalog_product_entity_media_gallery 其中attribute_id = 82 ) ) 在重复密钥更新值 = cpev.value;
一旦完成,重新索引/重新缓存就完成了。图片显示在管理员中。
必须有一种正确的方法,不会导致我需要手动执行 4 个 SQL 查询来让图像在导入后正常工作!我究竟做错了什么?
谢谢人们。