2

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

谢谢人们。

4

1 回答 1

1

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

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

于 2012-08-15T13:35:53.953 回答