我使用以下代码为了将图像添加到Magento中的现有产品。Magento 1.6:addImageToMediaGallery不添加到管理存储或媒体库
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();
一旦我对所有需要更新/添加的产品执行此操作,我将重新索引全部并清除缓存。该图像不显示在产品的管理区域中。但是,图像确实显示在前端产品详细信息页面上,但不显示在类别列表页面上的小图像上。
检查数据库中,有对产品的下列3项有关在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
有底座,体积小,针对前端店面拇指图像。现在,如果我运行下面的SQL查询来发现具有STORE_ID 4 catalog_product_entity_varchar所有行和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再次用81替换79的,然后,我得到了以下相关行中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表示前面的查询已经设置图像:
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;
一旦做到这一点,和重新索引/重新缓存完成。图像显示在管理员。
必须有一个合适的方式,不会导致我需要手动执行4个SQL查询才能在导入后正常运行图像!我究竟做错了什么?
谢谢大家。
您是否发布了完整的PHP代码?你以某种方式循环产品? 你刚刚添加图像到画廊吗? '$ product-> addImageToMediaGallery( $ local_img_path, null, false, false );' – 2012-08-10 09:26:17