Magento 1.6:addImageToMediaGallery不会添加到管理商店或媒体库

时间:2012-08-01 18:38:23

标签: magento magento-1.6

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

谢谢大家。

1 个答案:

答案 0 :(得分:1)

令人尴尬和愤怒 - 我通过删除app / code / core / Mage并用新下载的该文件夹副本替换它来修复它。看起来有些核心文件已被编辑,并在此过程中被破坏。

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