13

我有一家 Magento 商店,里面有大约 3,000 种产品。几乎所有这些产品都附有一张图片。

由于某种原因,即使我将小图像和缩略图图像设置为与导入 CSV 文件中的基本图像相同,但每个产品只设置了基本图像。这意味着当您搜索产品时,您会得到一个占位符 - 但是一旦您进入产品页面,您就会得到正确的图像。这可以通过进入产品管理页面并选择小图像和缩略图框来轻松解决。

问题是,对于 3,000 张图像,手动完成需要相当长的时间。我找到了一个 SQL 命令,它应该使所有基本图像、小图像和缩略图图像都映射到每个产品的第一个图像。因为我每个产品只有一张图片,所以这应该是完美的。但是,它什么也没做。它说 0 行已更改。

UPDATE catalog_product_entity_media_gallery AS mg,
catalog_product_entity_media_gallery_value AS mgv,
catalog_product_entity_varchar AS ev
SET ev.value = mg.value
WHERE  mg.value_id = mgv.value_id
AND mg.entity_id = ev.entity_id
AND ev.attribute_id IN (70, 71, 72)
AND mgv.position = 1

有谁知道为什么这不起作用?

谢谢,

丹尼

4

6 回答 6

23

就像对任何想要尝试这个脚本的人(比如我自己!)的警告。我不假思索地运行了它,它改变了所有的产品名称!

  1. 进入你的属性面板,找到图像/小图像/缩略图属性。
  2. 记下 id(在这种情况下,我的是 85,86 和 87)
  3. 更改查询以反映这些 ID。

所以我的查询看起来像:

UPDATE catalog_product_entity_media_gallery AS mg,
       catalog_product_entity_media_gallery_value AS mgv,
       catalog_product_entity_varchar AS ev
SET ev.value = mg.value
WHERE  mg.value_id = mgv.value_id
AND mg.entity_id = ev.entity_id
AND ev.attribute_id IN (85,86,87)
AND mgv.position = 1;
于 2012-08-06T10:14:25.867 回答
19

在对数据库进行这样的更改后,即使成功,您也需要在缓存管理中重建图像缓存。

您可能可以使用这样的脚本来完成它,而不必担心缓存或索引。

<?php

require 'app/Mage.php';
Mage::app();

$products = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*');
foreach ($products as $product) {
    if (!$product->hasImage()) continue;
    if (!$product->hasSmallImage()) $product->setSmallImage($product->getImage());
    if (!$product->hasThumbnail()) $product->setThumbnail($product->getImage());
    $product->save();
}

?>Done!

将其保存在您的 Magento 目录中,并通过在浏览器的地址栏中输入 URL 来访问它。我还没有测试过这个脚本。

于 2010-12-04T13:21:22.483 回答
2

我知道这是一篇旧帖子,但是如果有人遇到同样的问题,那么问题出在 ev.attribute_id 上。更新代码如下:

UPDATE 
    catalog_product_entity_media_gallery AS mg,
    catalog_product_entity_media_gallery_value AS mgv,
    catalog_product_entity_varchar AS ev
SET 
    ev.value = mg.value
WHERE  
    mg.value_id = mgv.value_id
      AND mg.entity_id = ev.entity_id
      AND ev.attribute_id IN (74, 75, 76)
      AND mgv.position = 1

谢谢。

于 2011-08-23T10:25:06.450 回答
1

我在 magento 1.7.0.2 上使用了 stereo_world 的方法,效果很好。(我不能赞成他的回答,因为我是stackoverflow的新手)

我不知道他在属性面板中哪里看到了属性 id,因为我根本看不到数字 id。我通过打开 phpMyAdmin 并查看 eav_attribute 表找到了 ids (85,86,87)。

正如clockworkgeek 指出的那样 - 重新索引/缓存刷新是必要的。

于 2013-04-25T19:39:35.463 回答
0

@user2321249 要在 CE 1.9.1 中查找属性 id,请转到属性信息页面并查看 URL。例如,从 Admin 后端,选择 Catalog->Manage Attributes。找到缩略图属性并选择它。在我的系统中,URL 是:

www.example.com/magento/index.php/admin/catalog_product_attribute/edit/attribute_id/87 /key/ f759b57c21a7c75f33095a243f44b2a5 /

您可以很容易地看出我系统中的缩略图属性 ID 是 87。对基本图像和小图像执行相同的操作。

于 2015-02-04T17:53:34.780 回答
0

我使用 Magento 1.9.2.2 版本的以下技巧让它工作:

INSERT INTO catalog_product_entity_varchar
      (entity_type_id, attribute_id, store_id, entity_id, value)
SELECT
      entity_type_id, 75, store_id, entity_id, value
FROM
      catalog_product_entity_varchar
WHERE 
      attribute_id = 74

然后将值 75 替换为 76 并再次导入查询。请务必将属性 id 值替换为您自己的

于 2015-11-13T08:06:25.987 回答