2012-08-01 52 views
2

我使用以下代码为了将图像添加到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查询才能在导入后正常运行图像!我究竟做错了什么?

谢谢大家。

+0

您是否发布了完整的PHP代码?你以某种方式循环产品? 你刚刚添加图像到画廊吗? '$ product-> addImageToMediaGallery( $ local_img_path, null, false, false );' – 2012-08-10 09:26:17

回答

1

尴尬和真气 - 我通过删除app/code/core/Mage并将其替换为该文件夹的新下载副本来修复它。看起来像是一些核心文件已经被编辑,并在这个过程中被破坏。

故事的寓意 - 不要编辑核心。