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

dan*_*mcc 12 sql image magento e-commerce magento-1.4

我有一个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
Run Code Online (Sandbox Code Playgroud)

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

谢谢,

丹尼

Tho*_*ing 21

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

  1. 进入属性面板,找到图像/小图像/缩略图属性.
  2. 记下ids(在这种情况下我的是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;
Run Code Online (Sandbox Code Playgroud)


clo*_*eek 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!
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您无法更改'memory_limit',最简单的解决方案是通过添加“-&gt; setPageSize(2000)-&gt; setCurPage(1);”来限制您的收藏。最后进行产品查询。然后将setcurpage更改为2,然后再次执行代码,依此类推。您可以调整页面大小,直到摆脱错误为止。 (2认同)