1

我正在使用 Magento 社区 1.7.0.2。

最近我决定在我的商店中打开“使用平面目录类别”和“使用平面目录类别”选项。我前端使用“图像”属性的所有图像都消失了(它们被默认图像占位符替换)。使用“small_image”或“thumbnail”属性显示的所有图像都能正确显示。

我查看了 catalog_product_flat_1 表,那里没有“图像”列(但有“图像标签”列......)。我查看了平面索引器代码,并能够打印用于获取插入平面表的所有属性的 SQL 语句:

SELECT `main_table`.*, `additional_table`.* 
FROM `eav_attribute` AS `main_table` 
INNER JOIN `catalog_eav_attribute` AS `additional_table` 
ON additional_table.attribute_id = main_table.attribute_id 
WHERE (main_table.entity_type_id = :entity_id) AND (main_table.backend_type = 'static'     
OR additional_table.is_used_for_promo_rules = 1 OR additional_table.used_in_product_listing = 1 OR additional_table.used_for_sort_by = 1 
OR main_table.attribute_code IN('sku', 'type_id', 'name', 'status', 'visibility', 'price', 'weight', 'url_path', 'url_key', 'thumbnail', 'small_image', 
'tax_class_id', 'special_from_date', 'special_to_date', 'special_price', 'cost', 'is_recurring', 'recurring_profile', 'msrp_enabled', 'msrp',
'msrp_display_actual_price_type', 'enable_googlecheckout', 'gift_message_available', 'price_view', 'price_type', 'shipment_type', 'weight_type', 
'sku_type', 'links_purchased_separately', 'links_title', 'short_description', 'image_label', 'thumbnail_label', 'small_image_label', 'news_from_date',
'news_to_date', 'created_at', 'updated_at', 'required_options'))

如您所见,列表中没有“图像”属性。

'image' 属性用于默认 Magento 发行版的前端,所以我想知道这是一个错误吗?

4

4 回答 4

6

我也花了一些时间来解决这个问题,这是我发现最干净的解决方案,它使用 Magento 的 XML 样式抽象将image列添加到catalog_product_flat_1表中:

在 config.xml 中:

<config>
    <frontend>
        <product>
            <collection>
                <attributes>
                    <image />
               </attributes>
            </collection>
        </product>
    </frontend>
</config>

然后重新索引您的平面目录表(Admin > Index Management > Select All + Reindex)并清除所有 Magento 缓存。

于 2014-06-24T21:21:36.853 回答
5

虽然@Jordi Buj 的回答会奏效,但它不是很可持续。例如,如果您在另一个 Magento 实例上重用该代码,它可能无法工作,直到有人按照描述的步骤将图像包含在平面表中。

一种更正确、基于代码的方法是将以下内容添加到您的 Mage_Catalog_Model_Resource_Product_Collection 中:

->joinAttribute('image', 'catalog_product/image', 'entity_id', null, 'left')

而不是典型的:

->addAttributeToSelect('image')

后者将简单地将“图像”添加到 SELECT 的列中(这无济于事,因为它不是该平面产品表中的列),而前者将显式加入来自 EAV 表的图像属性。

希望有帮助。

于 2013-08-26T21:47:22.007 回答
2

我前几天刚来这个问题。相同的 Magento 版本(1.7.0.2)虽然不同的症状。我实际上在我的网站上正确地看到了图像。我的问题是我的带有产品数量的自定义报告(总数、活动、没有描述/简短描述、没有图像/小/缩略图)开始给出不正确的结果,并发现这是因为我激活了平面产品表。

事实证明,Magento API (Mage::getModel('catalog/product')->getCollection()) 自动使用平面表,并且那里没有相同数量的信息,但只有一个绝对必要的信息。

例如,并非所有属性都会被复制,而只会复制那些被归类为“用于产品列表”的属性。在我的情况下,描述和图像都没有被复制,所以我去了管理员并设置为是“用于产品列表”。

对于图像来说,这并不容易,因为它的“店主的目录输入类型”(媒体图像)有效地隐藏了“用于产品列表”字段。所以我需要一个浏览器开发工具(如 Firebug 或 Chrome 开发工具)首先从“商店所有者的目录输入类型”字段中删除 disabled="disabled" HTML 属性,并将其更改为其他值。现在“在产品列表中使用”字段可见,将其设置为是。最后将“商店所有者的目录输入类型”值恢复为“媒体图像”。

如果您检查平面表 (catalog_product_flat_),那么您将看到图像和描述属性以及您自己。

这个过程对我有用。然后我重新检查了我的目录列表和类似页面,以避免任何令人讨厌的副作用......希望它对你有用

于 2013-05-30T09:05:54.847 回答
0

可以通过运行以下代码来解决该问题:

$attributeId = Mage::getResourceModel('eav/entity_attribute')->getIdByCode('catalog_product','image');

if ($attributeId) {
    $attribute = Mage::getModel('catalog/resource_eav_attribute')->load($attributeId);
    $attribute->setUsedInProductListing(1)->save();
}

我选择通过在我的一个本地模块中创建一个数据升级脚本来做到这一点。有关如何创建数据升级脚本的更多信息,请参阅本文的数据脚本部分:http: //inhoo.net/magento/magento-install-install-upgrade-data-and-data-upgrade-scripts/

于 2014-09-15T12:44:56.740 回答