使所有商店图像成为Magento中的基本,小图像和缩略图?

时间:2010-12-03 20:31:17

标签: sql image magento e-commerce magento-1.4

我有一家拥有约3,000种产品的Magento商店。几乎所有这些产品都附有单个图像。

出于某种原因,即使我将小图像和缩略图图像设置为与导入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

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

谢谢,

丹尼

6 个答案:

答案 0 :(得分:21)

向任何想要试用此脚本的人(如我自己!)发出警告。我不假思索地跑了这个,它改变了所有的产品名称!

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

    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;
    

答案 1 :(得分: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来访问它。我还没有测试过这个脚本。

答案 2 :(得分:1)

我知道这是一个旧帖子,但是如果有人遇到同样的问题,那么问题就在于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

感谢。

答案 3 :(得分:1)

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

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

正如clockworkgeek指出的那样 - reindex / cache flush是必要的。

答案 4 :(得分:0)

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

  

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

您可以轻松告诉我系统中的缩略图attribute_id是87.对基本图像和小图像执行相同的操作。

答案 5 :(得分: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

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