【问题标题】:Make all store images the base, small and thumbnail images in Magento?让所有商店图像成为 Magento 中的基本图像、小图像和缩略图图像?
【发布时间】:2011-05-19 23:22:07
【问题描述】:

我有一家 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

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

谢谢,

丹尼

【问题讨论】:

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


    【解决方案1】:

    我使用 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 值替换为您自己的

    【讨论】:

      【解决方案2】:

      @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。对基本图像和小图像执行相同操作。

      【讨论】:

        【解决方案3】:

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

        您也许可以使用这样的脚本来做到这一点,而不必担心缓存或索引。

        <?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 来访问它。我还没有测试过这个脚本。

        【讨论】:

        • 很抱歉,当我测试您的代码时,它无法工作。为什么。我添加回声'下来!';在你的代码之后。它不输出它。
        • @user1188320 确保你有display_errors on,这样你就可以看到哪里出了问题。如果它说内存不足,则增加memory_limit
        • 同样的问题。我做了同样的事情,但我得到了空白页?@clockworkgeek
        • @papa.ramu 如果您增加了memory_limitmax_execution_time 并且仍然存在问题,那么也许您可以根据您的不同经验提出一个新问题。
        • 如果您无法更改“memory_limit”,最简单的解决方案是通过添加“->setPageSize(2000)->setCurPage(1);”来限制您的收藏。最后是产品查询。并通过将 setcurpage 更改为 2 并再次执行代码,依此类推。您可以调整页面大小,直到您摆脱错误为止。
        【解决方案4】:

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

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

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

        【讨论】:

        • 我在管理属性页面的URL中找到了属性ID。例如index.php/admin/catalog_product_attribute/edit/attribute_id/85/key/c2069ce458b67f8598a3660bf2c8edf6/(attribute_id 之后的 id)
        【解决方案5】:

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

        谢谢。

        【讨论】:

          【解决方案6】:

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

          1. 进入属性面板,找到图片/小图片/缩略图属性。
          2. 记下 ID(在本例中我的 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;
          

          【讨论】:

          • 是的,我刚做了这个。对于首先找到这篇文章的人来说很好保存:)。
          • 这是真正的答案,我应该这样标记。谢谢!
          • 此解决方案正在运行,但现在它显示的图像与购物车、迷你购物车和结帐页面中的缩略图相同。在产品详细信息页面中,它显示正确的图像。请帮我解决这个问题
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-30
          • 1970-01-01
          • 2012-01-27
          • 1970-01-01
          • 1970-01-01
          • 2018-10-28
          相关资源
          最近更新 更多