我使用以下代码将图像添加到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的相应条目的所有行,并创建相应的行:
INSERT INTO catalog_product_entity_varchar (entity_type_id, attribute_id, store_id, entity_id, value) SELECT DISTINCT 4, 79, 0, entity_id, value FROM catalog_product_entity_varchar AS cpev WHERE attribute_id = 79 AND store_id != 0 AND entity_id IN ( SELECT entity_id FROM catalog_product_entity_varchar WHERE store_id = 4 AND attribute_id = 79 AND entity_id NOT IN ( SELECT entity_id FROM catalog_product_entity_varchar WHERE store_id = 0 AND attribute_id = 79 ) ) ON DUPLICATE KEY UPDATE value = cpev.value;
然后再次执行相同的操作两次,将80替换为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
图片现在显示在类别列表的前端,但STILL不在产品的管理区域中。
现在,我执行以下查询,在catalog_product_entity_media_gallery中添加一个条目,表示先前查询中已经设置的图像:
INSERT INTO catalog_product_entity_media_gallery (attribute_id, entity_id, value) SELECT 82, entity_id, value FROM catalog_product_entity_varchar AS cpev WHERE attribute_id = 79 AND store_id = 0 AND entity_id IN ( SELECT entity_id FROM catalog_product_entity_varchar WHERE store_id = 4 AND attribute_id = 79 AND entity_id NOT IN ( SELECT entity_id FROM catalog_product_entity_media_gallery WHERE attribute_id = 82 ) ) ON DUPLICATE KEY UPDATE value = cpev.value;
完成此操作后,将完成reindex / recache。图像显示在管理员中。
必须有一种正确的方法,不会导致我需要手动执行4个SQL查询才能在导入后使图像正常工作!我做错了什么?
谢谢大家。
答案 0 :(得分:1)
令人尴尬和愤怒 - 我通过删除app / code / core / Mage并用新下载的该文件夹副本替换它来修复它。看起来有些核心文件已被编辑,并在此过程中被破坏。
故事的寓意 - 不要编辑核心。